如果python中没有错误,如何保存整个数据库事务

时间:2015-04-11 06:05:53

标签: django database python-2.7 import transactions

我在文件夹中有很多文件我打开文件夹并将所有文件中的所有数据导入到我的模型中,这里我的程序一次导入一个文件中的数据,所以它会读取文件中的所有数据并且我遍历每行末尾的每一行,使用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))       

1 个答案:

答案 0 :(得分:0)

您可以使用transaction

所以你的功能应该是这样的:

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将回滚事务。