【发布时间】:2016-07-12 09:14:20
【问题描述】:
我正在尝试在 python 中使用 peewee 为数据库创建一个类。由于 peewee 在模型中使用了一个名为 meta 的类,这导致了嵌套类。我的问题是,如何在 Meta 类中定义数据库(=db)?有没有更好的办法?
import peewee as pe
class DataBase():
class SensorType(pe.Model):
name = pe.CharField(max_length=255, unique=True)
class Meta:
database = db
def ___init___(self,filename='sensors.db'):
db = pe.SqliteDatabase(filename)
db.connect()
db.create_tables([self.SensorType],safe=True)
def add_sensor(self,typeName):
type, created = self.SensorType.get_or_create(name=typeName)
return type, created
def get_sensors(self):
return self.SensorType.select().order_by(self.SensorType.name)
if __name__ == '__main__':
myDb = DataBase()
myDb.add_sensor('Test')
for type in myDb.get_sensors():
print(type.name)
我发现在我的主类的__init__ 函数中定义类是可行的。但这可能不是首选方法。
import peewee as pe
class DataBase():
def __init__(self,filename='sensors.db'):
db = pe.SqliteDatabase(filename)
db.connect()
class SensorType(pe.Model):
typename = pe.CharField(max_length=255, unique=True)
class Meta:
database = db
self.SensorType = SensorType
db.create_tables([self.SensorType],safe=True)
def add_sensor_type(self,typeName):
type, created = self.SensorType.get_or_create(typename=typeName)
return type, created
def get_sensor_types(self):
return self.SensorType.select()
if __name__ == '__main__':
myDb = DataBase()
myDb.add_sensor_type('Test')
for type in myDb.get_sensor_types():
print(type.id, type.typename)
【问题讨论】:
-
更好的方法?是的,不要使用嵌套类。
-
我同意,这似乎不是一个好方法。在我的示例中,您对如何避免它有任何提示吗?