Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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 Django中同时出现的AJAX请求和MySQL数据库数据可见性_Python_Mysql_Database_Django - Fatal编程技术网

Python Django中同时出现的AJAX请求和MySQL数据库数据可见性

Python Django中同时出现的AJAX请求和MySQL数据库数据可见性,python,mysql,database,django,Python,Mysql,Database,Django,我有一个Django应用程序,带有MySQL数据库,可以在HTML页面上回答问题。答案通过AJAX调用发送到服务器。这些调用是由各种JavaScript事件发起的,通常可以为一个答案触发多次。发生这种情况时,一个答案的多个保存请求将被发送到服务器 为了避免重复答案,每个答案在第一次保存时都会生成一个客户端ID-客户端ID。在创建新的应答服务器端之前,Django应用程序首先检查数据库,查看是否存在具有这样一个客户端id的应答。如果有,第二个保存请求将更新答案,而不是创建新答案 在Chrome中,

我有一个Django应用程序,带有MySQL数据库,可以在HTML页面上回答问题。答案通过AJAX调用发送到服务器。这些调用是由各种JavaScript事件发起的,通常可以为一个答案触发多次。发生这种情况时,一个答案的多个保存请求将被发送到服务器

为了避免重复答案,每个答案在第一次保存时都会生成一个客户端ID-
客户端ID
。在创建新的应答服务器端之前,Django应用程序首先检查数据库,查看是否存在具有这样一个
客户端id的应答。如果有,第二个保存请求将更新答案,而不是创建新答案

在Chrome中,当文本输入字段被聚焦,用户在Chrome窗口外单击时,两个保存请求会一个接一个地被触发。服务器同时接收它们。让我们假设,就本例而言,
client\u id
是71

第一个请求检查数据库,发现不存在客户id为
的应答。它创建一个新答案并保存在数据库中。我正在使用断点进行调试,此时,我在外部MySQL数据库查看器中看到答案确实已保存。在我的IDE中,当我执行
Answer.objects.filter(client_id=71)
时,我也会得到答案。我让调试器继续

我的第二个断点立即触发第二个AJAX保存应答请求。现在发生了一件奇怪的事情。在我的IDE中,当我执行
Answer.objects.filter(client\u id=71)
时,我看不到任何答案!我的外部工具确认答案在那里。因此,我的代码创建一个新答案并保存它。现在,如果在我的IDE中执行
Answer.objects.filter(client\u id=71)
我会看到两个带有
client\u id
的答案

我猜DB连接或MySQL使用了某种基于时间的方法来保持视图不变,但这给我带来了问题。我想现场了解DB的状态

我没有使用任何事务管理,因此Django应该执行自动提交


如何指示数据库连接到“刷新”或“重置”本身,以考虑数据库中实际存在的数据

我已经解决了这个问题,将我的视图包装在
@transaction.autocommit
装饰器中,并在检查数据库之前立即执行
transaction.commit()。这实现了我的“刷新”目标