【问题标题】:Using multiple databases with Pony ORM使用 Pony ORM 使用多个数据库
【发布时间】:2017-08-23 20:31:34
【问题描述】:

我正在考虑使用 sqlite 作为应用程序文件格式并使用 Pony ORM 作为轻量级 ORM。到目前为止,我见过的所有代码示例都将模型作为 database() 对象放在单独的文件中。

我的问题是,当用户创建一个新文件时,我如何为同一个数据库模型实例化一个新的数据库实例? (所有数据库都是相同的架构)

所以一个文档链接到一个小马数据库对象,另一个链接到一个单独的小马数据库对象。

这在 PonyORM 中可行吗?如果没有,是否可以在任何其他 Python ORM 中使用?

【问题讨论】:

  • 为什么需要另一个数据库实例?您可以在其他程序文件中导入db对象。

标签: python ponyorm


【解决方案1】:

通常最好将所有信息存储在单个数据库中。这样您就可以在一个查询中检索所有必要的信息。

如果您将数据拆分到多个数据库中,则不能混合从不同数据库检索的对象,并且需要使用单独的查询来处理每个数据库(尽管您可以在共享的 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.Foodb.Bar 等。

【讨论】:

  • 你没有得到类似的东西:pony.orm.core.ERDiagramError: Entity definition Foo was not found
  • 我和 dmigo 有同样的问题
猜你喜欢
  • 2019-01-06
  • 1970-01-01
  • 2014-08-31
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
相关资源
最近更新 更多