【问题标题】:When to use `session_maker` and when to use `Session` in sqlalchemy在 sqlalchemy 中何时使用 `session_maker` 以及何时使用 `Session`
【发布时间】:2021-05-31 20:37:50
【问题描述】:

Sqlalchemy's documentation 表示可以通过两种方式创建会话:

from sqlalchemy.orm import Session
session = Session(engine)

或与会话制造者

from sqlalchemy.orm import session_maker
Session = session_maker(engine)
session = Session()

现在,无论哪种情况,都需要一个全局对象(引擎或 session_maker 对象)。所以我真的不明白 session_maker 的意义是什么。也许我误解了什么。

我找不到任何建议何时应该使用其中一种。所以问题是:在什么情况下你想使用Session(engine),在什么情况下你更喜欢session_maker

【问题讨论】:

    标签: python sqlalchemy orm


    【解决方案1】:

    docs 很好地描述了不同之处:

    Session 是一个可以直接实例化的常规 Python 类。但是,为了标准化会话的配置和获取方式,sessionmaker 类通常用于创建顶级会话配置,然后可以在整个应用程序中使用,而无需重复配置参数。

    【讨论】:

    • 但如果您在某个模块中,则必须导入 sessionmaker 对象才能使用它创建会话。此时你不妨导入引擎并用它创建一个会话对象。我不太看到好处
    • 我的意思是好处真的只有Session()Session(engine)之间的区别吗?
    • 这不仅是添加engine 对象的好处,还可以添加许多其他配置选项到session。当您进行大量配置时,您会注意到 sessionmaker 的好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2014-01-16
    • 2015-09-06
    • 2016-02-11
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多