私はpyeweeでpeeweeを使用してデータベースのクラスを作成しようとしています。これは、モデル内でmetaという名前のクラスを使用しているため、入れ子にされたクラスになります。私の質問は、クラスメタの中でデータベース(= db)をどのように定義するのですか?おそらくもっと良い方法はありますか?クラスのクラスの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)
良い方法?はい、ネストされたクラスは使用しないでください。 –
私は同意する、それは良いアプローチではないようです。私の例でそれを避けるためのヒントはありますか? –