在 Pony ORM 中使用多个数据库
Using multiple databases with Pony ORM
我正在考虑使用 sqlite 作为应用程序文件格式,并使用 Pony ORM 作为轻量级 ORM。到目前为止,我看到的所有代码示例都将模型的 database() 对象放在单独的文件中。
我的问题是,当用户创建一个新文件时,如何为相同的数据库模型实例化一个新的数据库实例? (所有数据库都是相同的模式)
所以一个文档链接到一个 pony-orm 数据库对象,另一个链接到一个单独的 pony-orm 对象。
这在 PonyORM 中可行吗?如果没有,是否可以在任何其他 Python ORM 中使用?
通常最好将所有信息存储在一个数据库中。这样您就可以在单个查询中检索所有必要的信息。
如果您将数据拆分到多个数据库中,则不能混合从不同数据库中检索到的对象,并且需要使用单独的查询来处理每个数据库(尽管您可以在共享 db_session 中执行此操作)。
如果你真的想要多个数据库,你可以在一个函数中定义实体:
### file models.py
def define_entities(db):
class Foo(db.Entity):
...
class Bar(db.Entity):
...
def open_database(filename):
db = Database()
define_entities(db)
db.bind('sqlite', filename)
db.generate_mapping(create_tables=True)
return db
### file main.py
db1 = open_database('db1.sqlite')
db2 = open_database('db2.sqlite')
with db_session:
foos = select(foo for foo in db1.Foo if <condition>)[:]
bars = select(bar for bar in db2.Bar if <condition>)[:]
在上面的示例中,我写了一个函数 open_database
作为数据库工厂。每个数据库都有自己的实体 类,您可以作为 db 对象的属性访问:db.Foo
、db.Bar
等
我正在考虑使用 sqlite 作为应用程序文件格式,并使用 Pony ORM 作为轻量级 ORM。到目前为止,我看到的所有代码示例都将模型的 database() 对象放在单独的文件中。
我的问题是,当用户创建一个新文件时,如何为相同的数据库模型实例化一个新的数据库实例? (所有数据库都是相同的模式)
所以一个文档链接到一个 pony-orm 数据库对象,另一个链接到一个单独的 pony-orm 对象。
这在 PonyORM 中可行吗?如果没有,是否可以在任何其他 Python ORM 中使用?
通常最好将所有信息存储在一个数据库中。这样您就可以在单个查询中检索所有必要的信息。
如果您将数据拆分到多个数据库中,则不能混合从不同数据库中检索到的对象,并且需要使用单独的查询来处理每个数据库(尽管您可以在共享 db_session 中执行此操作)。
如果你真的想要多个数据库,你可以在一个函数中定义实体:
### file models.py
def define_entities(db):
class Foo(db.Entity):
...
class Bar(db.Entity):
...
def open_database(filename):
db = Database()
define_entities(db)
db.bind('sqlite', filename)
db.generate_mapping(create_tables=True)
return db
### file main.py
db1 = open_database('db1.sqlite')
db2 = open_database('db2.sqlite')
with db_session:
foos = select(foo for foo in db1.Foo if <condition>)[:]
bars = select(bar for bar in db2.Bar if <condition>)[:]
在上面的示例中,我写了一个函数 open_database
作为数据库工厂。每个数据库都有自己的实体 类,您可以作为 db 对象的属性访问:db.Foo
、db.Bar
等