我需要使用一些ORM引擎,比如 peewee ,来处理我的python应用程序中的SQLite数据库。但是,大多数此类库都提供这样的语法来定义models.py
:
import peewee
db = peewee.Database('hello.sqlite')
class Person(peewee.Model):
name = peewee.CharField()
class Meta:
database = db
但是,在我的应用程序中,我不能使用这样的语法,因为数据库文件名是在导入之后由外部代码提供的,从模块导入我的models.py
。
如何在知道动态数据库文件名的情况下从定义之外初始化模型?理想情况下,models.py
根本不应包含“数据库”提及,如正常的ORM。
答案 0 :(得分:4)
也许您正在查看代理功能: proxy - peewee
database_proxy = Proxy() # Create a proxy for our db.
class BaseModel(Model):
class Meta:
database = database_proxy # Use proxy for our DB.
class User(BaseModel):
username = CharField()
# Based on configuration, use a different database.
if app.config['DEBUG']:
database = SqliteDatabase('local.db')
elif app.config['TESTING']:
database = SqliteDatabase(':memory:')
else:
database = PostgresqlDatabase('mega_production_db')
# Configure our proxy to use the db we specified in config.
database_proxy.initialize(database)