Ich versuche, eine Klasse für eine Datenbank mit peewee in Python zu erstellen. Dies führt zu verschachtelten Klassen aufgrund der Verwendung einer Klasse namens meta in den Modellen durch peewee. Meine Frage ist, wie definiere ich die Datenbank (= db) innerhalb der Klasse Meta? Gibt es vielleicht einen besseren Weg?Klasse in Klasse in Python, wie Informationen zu teilen
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)
Ich fand, dass die Klassen in der __init__
Funktion meiner Hauptklasse Werke definieren. Aber es ist wahrscheinlich nicht der bevorzugte Ansatz.
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)
Ein besserer Weg? Ja, verwende keine verschachtelten Klassen. –
Dem stimme ich zu, es scheint kein guter Ansatz zu sein. Hast du Hinweise, wie ich das in meinem Beispiel vermeiden kann? –