我如何在导入时进行事务回滚和提交
How I can Do a transaction rollback and commit at the time of import
下面给出的代码是将数据导入我的django模型的程序,
实际上这个程序所做的是读取文件并将文件中的每一行导入到 django 模型中,这里可能会有 1000 个文件,某些文件中会有一些错误并且程序将捕获异常如果文件有任何类型的错误并记录它,但我需要的是从一个抛出 error.I 的文件回滚整个事务想在 postgres
中执行此操作
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 语句将对象保存到列表中
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
下面给出的代码是将数据导入我的django模型的程序, 实际上这个程序所做的是读取文件并将文件中的每一行导入到 django 模型中,这里可能会有 1000 个文件,某些文件中会有一些错误并且程序将捕获异常如果文件有任何类型的错误并记录它,但我需要的是从一个抛出 error.I 的文件回滚整个事务想在 postgres
中执行此操作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 语句将对象保存到列表中
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