Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 Flask SQAlchemy与_for_update()一起返回旧数据_Python_Mysql_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python Flask SQAlchemy与_for_update()一起返回旧数据

Python Flask SQAlchemy与_for_update()一起返回旧数据,python,mysql,flask,sqlalchemy,flask-sqlalchemy,Python,Mysql,Flask,Sqlalchemy,Flask Sqlalchemy,我的Flask应用程序中有一种情况,需要针对消费者生成越来越多的数字。为此,每个使用者在一个单独的表中都有一行,该表至今保存着数字生成器 由于多个请求可能同时到达服务器,因此我将锁定行以进行更新,然后更新数据并提交。但是,在提交之后,其他请求正在读取同一行的旧数据 我正在对模型的查询进行与\u for\u update。数据被读取,然后更新,然而,第二个请求读取旧数据。尝试将DB隔离级别设置为更高的级别(SERIALIZABLE),但无效 示例代码: obj = NumberGenerator.

我的Flask应用程序中有一种情况,需要针对消费者生成越来越多的数字。为此,每个使用者在一个单独的表中都有一行,该表至今保存着数字生成器

由于多个请求可能同时到达服务器,因此我将锁定行以进行更新,然后更新数据并提交。但是,在提交之后,其他请求正在读取同一行的旧数据

我正在对模型的查询进行
与\u for\u update
。数据被读取,然后更新,然而,第二个请求读取旧数据。尝试将DB隔离级别设置为更高的级别(
SERIALIZABLE
),但无效

示例代码:

obj = NumberGenerator.query.filter(
    NumberGenerator.consumer_id == consumer_id
).with_for_update().first()

obj.number = obj.number + 1

db.session.add(obj)
db.session.commit()
第二个请求读取旧数据。我无法理解为什么会发生这种情况。 我通过
iPython
尝试了同样的方法,效果完美。 尝试使用
MySQLdb
编写原始的
MySQL
查询,同样有效。在各种论坛(包括堆栈溢出)和软件包文档上搜索了很多,但什么都找不到

炼金术版本:2.3.2


MySQL版本:5.6

我遇到了同样的问题。有关解决方案,请参阅以下问题

简而言之,最简单的方法是将
填充_existing()
添加到查询中

obj=NumberGenerator.query.filter(
NumberGenerator.consumer\u id==consumer\u id
).with_for_update()。填充_existing()