2015-04-07 16 views
1
的时间提交

下面给出的代码是将数据导入我的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的交易文件去了,我想其中的一些,但它不工作..任何一个可以帮我请

+0

记住的MySQL与ISAM文件不suports交易。你使用的是什么dbms和存储系统? – danihp

+0

我没有使用mysql我正在使用sqlite3 – Krish

+0

Sqlite支持acid tx。请在您的问题中安排您的代码,保持简单:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – danihp

回答

1

可以保存OBJ到列表中使用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() 

我会建议你使用PostgreSQL的,而不是sqlite的