【问题标题】:SqlAlchemy - pools, sessions, exceptions handlingSqlAlchemy - 池、会话、异常处理
【发布时间】:2020-07-02 14:22:28
【问题描述】:

我的问题围绕连接池概念和为每个查询获取新连接的想法展开,但在 SqlAlchemy 的世界中。

我在研究中阅读了 this 和 this 有用的帖子。

我在我的代码中使用炼金术的Session。到目前为止,我在我的代码的入口点创建了一个Session 实例,并将这个实例传递到将执行实际查询的地方。但我开始看到这种方法的问题 - 特别是在处理异常时(例如回滚,只是回滚会话中的所有内容,而不仅仅是最后一个查询中具体出了什么问题)。

所以我想停止这样做,而是像这样启动一个连接池,作为我的代码的入口点,然后我将这个池传递到有查询的地方。在这样的地方,我从池中获取一个连接,做我的事情,如果出现问题,我只回滚这个特定的连接,并将其返回到池中。

我的问题是我不知道如何将所有这些与Session 概念联系起来。 alchemy 的Engine 实例是否创建/管理这样的池?我是否应该考虑创建一个新的 Session 实例作为从池中获取连接?如果是这样,我如何将Session 返回给引擎?等等。

不胜感激。

【问题讨论】:

    标签: python sqlalchemy database-connection


    【解决方案1】:
    • alchemy 的 Engine 实例是否创建/管理此类池?

      • 默认情况下,通过 create_engine 创建引擎时会创建连接池(可通过 pool 和 poolclass 关键字参数进行配置)。
    • 我是否应该考虑创建一个新的 Session 实例作为从池中获取连接?

    • [...] 如何将会话返回给引擎

      • 调用会话的close 方法,或者在作用域会话的情况下,调用scoped_session 的remove 方法。

    【讨论】:

    • 谢谢!您认为将Engine 实例传递到需要会话的那些地方/功能,并在那里打开和关闭一个新的Session 实例是一个好的策略/想法/模式吗?
    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2022-11-01
    • 2013-02-27
    • 2014-10-22
    相关资源
    最近更新 更多