【问题标题】:SQLAlchemy Connections, pooling, and SQLiteSQLAlchemy 连接、池和 SQLite
【发布时间】:2010-11-25 03:06:26
【问题描述】:

所以,我的设计要求为每个“项目”创建一个单独的 SQLite 文件。我正在更仔细地阅读 SQLAlchemy Pooling 文档。我现在的猜测是我根本不想用池来愚弄,但这真的是每个项目都有一个单独的连接引擎。同意吗??

在这种情况下,当我创建引擎时,要么连接到一个按约定命名的文件,要么创建一个新的 SQLite 文件并提供一个模式模板...??

【问题讨论】:

    标签: sqlite sqlalchemy


    【解决方案1】:

    嗯,什么?连接池包含到同一(数据库)服务器的许多连接。建立新连接需要时间,因此当有许多短期进程使用同一个数据库时,拥有一个已建立连接的池会很方便。这些进程可以检查一个连接,做他们的事情并返回它,而无需等待打开一个新的连接。

    在任何情况下,所有连接都指向同一个数据库,由传递给 create_engine 的 URI 给出

    【讨论】:

      【解决方案2】:

      首先,一些词汇。 SQLAlchemy 使用 MetaData 对象定义模式,其中包含表示表和其他数据库实体的对象。元数据对象可以选择性地“绑定”到您认为是“池”的引擎

      要创建标准架构并在多个数据库中使用它,您需要创建一个元数据对象并将其与多个引擎一起使用,每个引擎都是一个数据库你连接到。这是一个来自交互式 iPython 提示的示例。请注意,这些 SQLite 引擎中的每一个都连接到不同的内存数据库; connection1 和 connection2 没有连接到同一个数据库:

      In [1]: from sqlalchemy import *
      In [2]: metadata = MetaData()
      In [3]: users_table = Table('users', metadata,
         ...:                     Column('id', Integer, primary_key=True),
         ...:                     Column('name', String))
      In [4]: connection1 = create_engine('sqlite:///:memory:')
      In [5]: connection2 = create_engine('sqlite:///:memory:')
      
      In [6]: ## Create necessary tables
      In [7]: metadata.create_all(bind=connection1)
      In [8]: metadata.create_all(bind=connection2)
      
      In [9]: ## Insert data
      In [10]: connection1.execute(
                   users_table.insert(values={'name': 'Mike'}, bind=connection1))
      In [11]: connection2.execute(
                   users_table.insert(values={'name': 'Jim'}, bind=connection2))
      
      In [12]: print connection1.execute(users_table.select(bind=connection1)).fetchall()
      [(1, u'Mike')]
      
      In [13]: print connection2.execute(users_table.select(bind=connection2)).fetchall()
      [(1, u'Jim')]
      

      如您所见,我连接到两个 sqlite 数据库并使用存储在我的 元数据 对象中的通用模式在每个数据库上执行语句。如果我是你,我会从使用 create_engine 方法开始,而不用担心池化。当需要优化时,您可以使用 create_engine 的参数来调整数据库的连接方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 2020-03-12
        • 1970-01-01
        • 2011-07-29
        相关资源
        最近更新 更多