peewee-与Database()初始化分开定义模型

Cro*_*oll 2 python sqlite orm python-3.x peewee

我需要使用peewee之类的ORM引擎来处理python应用程序中的SQLite数据库。但是,大多数此类库都提供如下语法来定义models.py

import peewee

db = peewee.Database('hello.sqlite')

class Person(peewee.Model):
    name = peewee.CharField()

    class Meta:
        database = db
Run Code Online (Sandbox Code Playgroud)

但是,在我的应用程序中,由于数据库文件名是从导入模块的模块导入后由外部代码提供的,因此我无法使用这种语法models.py

如何在知道动态数据库文件名的情况下从其定义之外初始化模型?理想情况下,models.py不应该像普通的ORM那样完全包含“数据库”提及。

MrP*_*dav 5

也许您正在查看代理功能: 代理-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)
Run Code Online (Sandbox Code Playgroud)