Я использую peewee для управления операциями CRUD в базе данных Postgres.
В документации проекта подключение к базе данных и создание ORM должно быть настроено через класс Meta
, который должны наследовать другие типы ORM.
from peewee import *
db = PostgresqlDatabase('table', **{})
class BaseModel(Model):
class Meta:
database = db
class Product(BaseModel):
name = CharField(unique=True)
Я хотел бы иметь возможность инкапсулировать эту настройку в класс Persistence
, как показано ниже (чтобы не создавать какие-либо глобальные переменные):
class Persistence():
db = None
class BaseModel(Model):
class Meta:
database = Persistence.db
class Product(BaseModel):
name = CharField(unique=True)
def __init__(self):
self.db = PostgresqlDatabase('table', **{})
К сожалению, это не работает с:
AttributeError: type object 'Persistence' has no attribute 'db'
Я не думаю, что это будет работать так, как ожидалось (не считая AttributeError
), потому что даже если переменная находилась в области видимости во время создания BaseModel
, она была бы None
и не изменялась при создании экземпляра класса Persistence
.
- Есть ли способ правильно определить область действия переменной
db
, чтобы она использовала атрибут класса дляPersistence
? - Могу ли я передать это
db
соединение сpeewee
через другой механизм?