Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于使用SQLAlchemy的Flask应用程序,连接和会话的使用有什么区别_Python_Flask_Sqlalchemy - Fatal编程技术网

Python 对于使用SQLAlchemy的Flask应用程序,连接和会话的使用有什么区别

Python 对于使用SQLAlchemy的Flask应用程序,连接和会话的使用有什么区别,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我有一个flask应用程序,它使用SQLAlchemy与数据库对话。对于单个请求,应用程序在事务之后作为单个工作单元执行多个dml操作。传入的请求决定连接哪个数据库,因为在某些情况下,每个用户有一个数据库。由于这种按用户数据库的复杂性,并且发出的sql查询通常很复杂,因此我们不使用SQLAlchemy ORM或Flask SQLAlchemy 如何在Web应用程序的上下文中选择使用连接还是会话? 连接和会话都有助于实现事务行为。SQLalchemy文档建议使用连接来执行文本sql。 建议使用co

我有一个flask应用程序,它使用SQLAlchemy与数据库对话。对于单个请求,应用程序在事务之后作为单个工作单元执行多个dml操作。传入的请求决定连接哪个数据库,因为在某些情况下,每个用户有一个数据库。由于这种按用户数据库的复杂性,并且发出的sql查询通常很复杂,因此我们不使用SQLAlchemy ORM或Flask SQLAlchemy

如何在Web应用程序的上下文中选择使用连接还是会话?

连接和会话都有助于实现事务行为。SQLalchemy文档建议使用连接来执行文本sql。 建议使用conenction和transaction的方法如下

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连接中事务不是线程安全的实例,即两个线程不能同时在同一个签出连接上运行。