Django 如何在导入时执行事务回滚和提交

Django 如何在导入时执行事务回滚和提交,django,database,postgresql,python-2.7,transactions,Django,Database,Postgresql,Python 2.7,Transactions,下面给出的代码是将数据导入django模型的程序, 实际上,这个程序所做的是读取文件并将文件中的每一行导入django模型,这里可能会有1000个文件,某些文件中会有一些错误,如果文件有任何类型的错误,程序将捕获异常并记录它,但是我需要的是从一个抛出错误的文件回滚整个事务 def impSecOrdr_File(self,path): lines=1 try: fromFile=open(path) for eachLine in fromFile

下面给出的代码是将数据导入django模型的程序, 实际上,这个程序所做的是读取文件并将文件中的每一行导入django模型,这里可能会有1000个文件,某些文件中会有一些错误,如果文件有任何类型的错误,程序将捕获异常并记录它,但是我需要的是从一个抛出错误的文件回滚整个事务

def impSecOrdr_File(self,path):
    lines=1
    try:
        fromFile=open(path)
        for eachLine in fromFile:
            obj = SecOrdr_File()
            if lines!=1:
                fieldsInline = eachLine.split(",")
                obj.dates =  dates
                obj.column1 = fieldsInline[0].strip()
                obj.column2 = fieldsInline[1].strip()
                obj.column3 = float(fieldsInline[2].strip())
                obj.column4 = float(fieldsInline[3].strip())
                obj.save()
            lines+=1
    except BaseException as e:
        transaction.rollback()
        logging.info('\tError in importing %s line %d : %s' % (path, lines, e.__str__()))
    else:
        try:
            logging.info("\tImported %s, %d lines" % (path, lines))
        except Exception as e:
            logging.info(e)

有没有办法做到这一点。我浏览了django交易文档,并尝试了其中一些,但它不起作用。。有人能帮我吗?

如果所有事务都通过了保存事务,您可以使用try语句将obj保存到列表中

lis =[]
try:
   #your code
   lis.append(obj) #instead of obj.save()
except:
   #catch the error and transaction get cancelled
else:
    k=len(lis)
    for i in range(k):
         lis[i].save()

我建议您使用postgresSQL而不是sqlite

记住,带isam文件的mysql不支持事务。您使用的是什么dbms和存储系统?我没有使用mysql,我使用的是sqlite3Sqlite支持acid tx。请在问题中安排您的代码,保持简单: