【发布时间】:2018-07-08 05:14:42
【问题描述】:
我不确定我想做的事情是否合理,但我想将与数据库管理相关的所有类和方法放在一个类中。
所以会有DataSaver 类代表一个数据库实例。
现在,official PeeWee docs 建议创建 BaseModel 并在其中存储 database 变量。以下是它在示例中的显示方式:
from peewee import *
db = SqliteDatabase('my_app.db')
class BaseModel(Model):
class Meta:
database = db
class User(BaseModel):
username = CharField(unique=True)
class Tweet(BaseModel):
user = ForeignKeyField(User, backref='tweets')
message = TextField()
created_date = DateTimeField(default=datetime.datetime.now)
is_published = BooleanField(default=True)
现在我正在尝试做同样的事情,但在课堂上:
class DataSaver:
def __init__(self, database_save_path):
self.database_save_path = database_save_path
self.db = SqliteDatabase(database_save_path)
db.connect()
db.create_tables([User, Chat, Message], True)
class BaseModel(Model):
class Meta:
database = self.db
class User(BaseModel):
name = CharField(unique=True)
class Chat(BaseModel):
name = CharField(unique=True)
这里的问题是:BaseModel 目前无权访问变量db。 self 目前没有指向 DataSaver,所以很明显编译器在这一点上可能会有点困惑。
您知道如何将db 变量传递给 BaseModel,以便第二个代码块的工作方式与第一个相似吗?
【问题讨论】: