Python 对于使用SQLAlchemy的Flask应用程序,连接和会话的使用有什么区别
我有一个flask应用程序,它使用SQLAlchemy与数据库对话。对于单个请求,应用程序在事务之后作为单个工作单元执行多个dml操作。传入的请求决定连接哪个数据库,因为在某些情况下,每个用户有一个数据库。由于这种按用户数据库的复杂性,并且发出的sql查询通常很复杂,因此我们不使用SQLAlchemy ORM或Flask SQLAlchemy 如何在Web应用程序的上下文中选择使用连接还是会话? 连接和会话都有助于实现事务行为。SQLalchemy文档建议使用连接来执行文本sql。 建议使用conenction和transaction的方法如下Python 对于使用SQLAlchemy的Flask应用程序,连接和会话的使用有什么区别,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我有一个flask应用程序,它使用SQLAlchemy与数据库对话。对于单个请求,应用程序在事务之后作为单个工作单元执行多个dml操作。传入的请求决定连接哪个数据库,因为在某些情况下,每个用户有一个数据库。由于这种按用户数据库的复杂性,并且发出的sql查询通常很复杂,因此我们不使用SQLAlchemy ORM或Flask SQLAlchemy 如何在Web应用程序的上下文中选择使用连接还是会话? 连接和会话都有助于实现事务行为。SQLalchemy文档建议使用连接来执行文本sql。 建议使用co
from sqlalchemy import create_engine
engine = create_engine("postgresql://scott:tiger@localhost/test")
connection = engine.connect()
trans = connection.begin()
connection.execute("insert into x (a, b) values (1, 2)")
trans.commit()
但是文档也指出连接和事务都不是线程安全的。
如果是,连接对象在哪些情况下有用?
谈到会话,sqlalchemy提供的作用域会话是线程安全的,似乎是解决此问题的一种方法。
但与连接不同,会话不支持嵌套事务行为
在stackoverflow中,我已经阅读了许多答案。但是我没有找到任何答案来解释web应用程序中连接和会话w.r.t线程安全之间的区别。当您运行
connection=engine.connect()时。这意味着您正在从连接池获取连接对象。所以连接对象是线程安全的。但是文档说事务和连接对象不是线程安全的。因此,我认为它们不能用于多线程web应用程序?请检查mysql中的锁和事务。如果确实只需要一个连接来更新该行,则需要在该行上具有写锁。这里有一个mysql@pavan连接中事务不是线程安全的实例,即两个线程不能同时在同一个签出连接上运行。