Я пытаюсь создать класс для базы данных с использованием peewee в python. Это приводит к вложенным классам из-за использования peewee класса с именем meta в моделях. Мой вопрос: как определить базу данных (= db) в классе Meta? Может быть, лучший способ?Класс в классе в классе в python, как обмениваться информацией
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)
Лучший способ? Да, не используйте вложенные классы. –
Согласен, это не похоже на хороший подход. Есть ли у вас какие-либо намеки на то, как избежать этого в моем примере? –