Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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中为模型提交数据库事务?_Python_Django_Transactions_Pusher - Fatal编程技术网

Python 如何在Django中为模型提交数据库事务?

Python 如何在Django中为模型提交数据库事务?,python,django,transactions,pusher,Python,Django,Transactions,Pusher,示例I有两种型号: class Customer: ... class ImportResult: ... 我想将客户从文件导入我们的数据库,并更新导入结果进度。下面是示例代码: with transaction.atomic(): Customer.objects.create(**data) import_result.update_progress() import_result.save() 问题是,由于导入\u结果也在事务内部,因此在更新时我无法

示例I有两种型号:

class Customer:
    ...

class ImportResult:
    ...
我想将
客户
从文件导入我们的数据库,并更新
导入结果
进度。下面是示例代码:

with transaction.atomic():
   Customer.objects.create(**data)
   import_result.update_progress()
   import_result.save()

问题是,由于
导入\u结果
也在事务内部,因此在更新时我无法获得进度。数据仅在事务完成时提交到数据库。注意,当调用
update\u progress()
时,我们使用
Pusher
实时更新web。因此,问题是是否存在例外或强制
import\u result
立即提交到数据库?

这个问题需要更多细节<代码>导入\u结果似乎是一个模型实例。您的意思是
update\u progress()
在事务中运行吗?什么是“进展”?它是
ImportResult
上的数据库字段吗?在事务完成之前,您在哪里尝试获取该值并使用它?我在您发布的代码中看不到这一点。@KevinChristopherHenry
import\u result
Customer
模型的交易中运行。是
progress
是一个字段
import\u result
示例数据应
[“步骤1完成”、“步骤2失败”、“导入失败”]
。所以进度已经保存了,我所做的是通过
Pusher
import\u result
id发送到前端(angular),所以前端只需要调用
/api/import\u result/id/
来获得更新的数据,但由于它在事务中,所以它还没有提交到数据库,所以我无法获得最新的数据,答案是否定的。你不能两全其美。如果您希望更新进度时出现故障,那么将该更新放在一个事务中是没有意义的,该事务将在出现故障时回滚。为什么在上面的代码中有
transaction.atomic()
呢?@KevinChristopherHenry因为我需要回滚
Customer
模型,如果有任何东西失败了。同时,我需要更新进度。获得所需内容的唯一方法是将更新代码放在单独的事务中,这意味着单独的数据库连接。Django并不直接支持这一点,但如果你环顾四周,就会发现这一点。