[英]How can I save the whole DB transaction if there is no error in python
我在一個文件夾中有很多文件,我打開文件夾並將所有文件中的所有數據導入到我的模型中,這里我的程序一次將數據導入一個文件中,因此它將一次讀取文件中的所有數據,然后進行迭代通過每一行末尾的每一行,我使用obj.save()
將事務保存到數據庫。
我在這里遇到一些異常,而導入可能會鍵入不匹配錯誤,因此程序將停止該文件的導入,一半的數據將被導入,然后移至下一個文件。 因此,此問題導致數據重復,因此在這里我需要使用文件的obj.save()
保存事務,如果沒有例外,我該如何實現這一目標,任何人都可以幫助我
fromFile=open(path)
for eachLine in fromFile:
obj = SAMP()
fieldsInline = eachLine.split(",")
n=len(fieldsInline)
if lines!=1:
#obj.dates = dates
obj.col1 = fieldsInline[0].strip()
obj.col2 = fieldsInline[1].strip()
obj.col3 = fieldsInline[2].strip()
obj.col4 = fieldsInline[3].strip()
obj.save()
lines+=1
except BaseException as e:
logging.info('\tError in importing %s line %d : %s' % (path, lines, e.__str__()))
else:
logging.info("\tImported %s, %d lines" % (path, lines))
您可以使用交易 。
因此,您的功能應如下所示:
from django.db import transaction
@transaction.commit_on_success
def func():
pass
要么:
from django.db import transaction
def func():
# Some code
with transaction.commit_on_success():
pass
如果函數成功返回,那么Django將在此時提交在函數內完成的所有工作。 但是,如果函數引發異常,Django將回滾事務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.