我正在使用Peewee进行我正在进行的项目,我正在试图弄清楚如何动态设置数据库,以便我可以使用一个用于生产,一个用于测试。我见过的所有例子在任何类之外都有以下行:
database = SqliteDatabase(DATABASE)
我觉得很奇怪,因为我认为你会希望它在一个类中,所以你可以传入不同的数据库路径。有关为prod和另一个数据库选择一个数据库进行测试的建议吗?
答案 0 :(得分:3)
我刚刚遇到了类似的问题,这是我如何解决它在运行时定义数据库的路径:
模型文件:
import peewee
database = peewee.SqliteDatabase(None) # Defer initialization
class SomeData(peewee.Model):
somefield = peewee.CharField()
class Meta:
database = database
然后在使用数据库的类中:
from models import SomeData
class DatabaseUser:
def __init__(self, db_path):
database.init(db_path)
答案 1 :(得分:2)
数据库通常在模块范围内声明,因为模型类是在那里定义的,而通常依赖于数据库。
但是,您可以使用以下技术推迟数据库的初始化:
如果您使用相同的数据库类,第一个很有用。当你使用Sqlite for dev和Postgres for prod时,你真的只需要代理,例如。