gpt4 book ai didi

python - 将 SQLAlchemy 与引擎/连接而不是 session 一起使用是否是线程安全的?

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:49 26 4
gpt4 key购买 nike

我有一个简单的 Web 服务,它使用 SQLAlchemy 使用该模式连接到数据库

engine = create_engine(database_uri)
connection = engine.connect()

在服务的每个端点中,我按以下方式使用相同的连接:

for result in connection.execute(query):
<do something fancy>

由于 Session 不是线程安全的,恐怕 connection 也不是线程安全的。

我可以安全地继续这样做吗?如果没有,最简单的修复方法是什么?

小提示 - 我不知道该服务是否会以多线程方式运行,但我宁愿确保在它运行时不会遇到麻烦。

最佳答案

简短回答:你应该没问题。

连接 session 之间是有区别的。简而言之,连接仅代表……与数据库的连接。您传递给它的信息将非常简单地显示出来。除非您告诉它,否则它不会跟踪您的交易,并且它不会关心您向其发送数据的顺序。因此,如果在创建 Sprocket 对象之前创建 Widget 对象很重要,那么您最好在线程安全上下文中调用它。如果您想跟踪数据库事务,通常也是如此。

另一方面,

Session 会为您跟踪数据和交易。如果你check out the source code ,您会注意到数据库事务上有相当多的来回,并且没有办法知道您在事务中拥有您想要的所有内容,您很可能最终在一个线程中提交,而您希望能够添加另一个线程另一个对象(或多个)。

<小时/>

如果您不知道什么是交易 this is Wikipedia ,但简单来说,交易有助于确保您的数据保持稳定。如果您有 15 次插入和更新,并且插入 15 次失败,您可能不想进行其他 14 次。事务可以让您批量取消整个操作。

关于python - 将 SQLAlchemy 与引擎/连接而不是 session 一起使用是否是线程安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com