【发布时间】:2020-11-18 05:49:18
【问题描述】:
我想在http://arr.gr/blog/2016/05/mysql-named-locks-in-python-context-managers/ 中实现一个名为 lock 的 MySQL 样式:
使用sqlalchemy Session,我直接执行了一个GET_LOCK:
lock = session.execute("SELECT GET_LOCK('TEST', 5)")
然后,如果我的锁没问题,我就做我想做的事,尤其是我的数据库使用会话的一些东西。之后我释放锁:
session.execute("SELECT RELEASE_LOCK('TEST)")
我的问题如下: 如何确定发布时与数据库的会话连接与开始时的连接相同?
sqlalchemy 的文档说:
当事务状态在回滚或提交后完成时, Session 释放所有 Transaction 和 Connection 资源 [...]
http://docs.sqlalchemy.org/en/latest/orm/session_transaction.html
我在 Web 应用程序的上下文中,所以每次提交会话时,或者如果会话回滚,下一个查询不能保证在同一个连接上。对于我的大部分操作来说,这不是问题,但对于 MySQL 命名锁,必须在同一个连接上请求“GET_LOCK”和“RELEASE_LOCK”。
我发现的唯一方法是为锁定设置一个特定会话:它只会为锁定保持连接。但是有没有办法不为此目的使用连接?
编辑 2017-06-22:
这个话题是关于同一主题的:SQLAlchemy session and connection relationship。但是如果使用 scoped_session:
- 关于上述文档的摘录,在提交或回滚之后,未来查询与此会话的连接可能会有所不同,对吧?
- 线程中将使用唯一会话?
【问题讨论】:
标签: python-2.7 sqlalchemy