gpt4 book ai didi

python - 针对不同数据库后端的 peewee 数据库的运行时初始化

转载 作者:行者123 更新时间:2023-12-01 02:27:06 28 4
gpt4 key购买 nike

我正在尝试编写一个(在某种程度上)独立于数据库的模块。我想定义我的 peewee 模型,然后使用数据库对象的 init 方法在运行时连接到数据库。

当我传递 Sqlite 连接字符串时,它会按预期工作,例如

>>> app.db.init('sqlite://mydb.sqlite')

连接到数据库,一切按预期工作。但是当我尝试使用 postgres 连接字符串进行相同操作时,出现错误;

>>> app.db.init('postgresql://username:password@localhost/mydb')
...
peewee.OperationalError: FATAL: database "postgresql://username:password@localhost/mydb" does not exist

如果我使用单独的参数,我可以获得 init 方法进行连接;

>>> app.db.init('mydb', username='username', password='password')

但这在不同的数据库后端之间不能很好地转换。

任何人都可以为我指出让 init 使用连接 URI 的正确方向吗?

最佳答案

与 Peewee 作者进行一些互动后,答案似乎是使用 Proxy 对象 - http://docs.peewee-orm.com/en/latest/peewee/database.html#dynamically-defining-a-database

在我的模型模块中我这样做;

database_proxy = pw.Proxy()
...
class Blah(pw.Model):
column_one = pw.CharField()

class Meta:
database = database_proxy

然后在运行时进行连接;

>>> from playhouse.db_url import connect
>>> import models
>>> db = connect('postgresql://username:password@localhost/mydb')
>>> models.database_proxy.initialize(db)

然后我就可以正常与我的模型对象交互。这样我就可以在不同的数据库后端之间切换,并且只需在我的应用程序配置中使用一个连接 URL 字符串即可在它们之间进行切换。

关于python - 针对不同数据库后端的 peewee 数据库的运行时初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47273956/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com