django - 我如何在导入时进行事务回滚和提交

标签 django database postgresql python-2.7 transactions

下面给出的代码是将数据导入我的 django 模型的程序, 实际上这个程序所做的是读取文件并将文件中的每一行导入到 django 模型中,这里可能会有 1000 个文件,某些文件中会有一些错误,如果文件出现异常,程序将捕获异常有任何类型的错误并记录它,但我需要的是从一个抛出错误的文件回滚整个事务。我想在 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 - 我如何在导入时进行事务回滚和提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29485478/

相关文章:

java - glassfish 抛出 org.postgresql.xa.PGXAException

django - Postgres 函数未按预期返回输出参数

python - 在每个测试方法之前清理 django 中的数据库

Django:在 Django Admin 中过滤或显示模型方法

mysql - 选择字符串主键与使用具有相应整数 id 的连接表

php - 如何制作登录页面以添加到我当前的代码中

postgresql - 如何在postgresql中的extract()上添加索引

python - Django 我如何确定缺少哪些参数?

python - Django 1.11.4 Postgresql SELECT ARRAY 到 django orm

mysql - 错误 : could not open single-table tablespace file .\scrapers\records.ibd