我正在尝试使用Django的ORM与PostgreSQL后端进行一些数据处理。给定主记录,在相关表中生成数百条记录,但如果发生任何错误,我想回滚所有记录创建。因此,我将整个过程包装在手动事务中。
@transaction.commit_manually(main_record)
def save_data(data):
try:
create lots of records -> .save()
except Exception, e:
print 'Unexpected Error: %s' % e
transaction.rollback()
raise
else:
print 'Saving...'
try:
imgObj.processed = True
main_record.save()
transaction.commit()
print 'Saved!'
except Exception, e:
print 'Unexpected Error during commit: %s' % e
raise
但是,当我尝试commit()时,它会抛出异常“对已关闭文件的I / O操作”。谷歌搜索引用了一些这方面的内容,但关于PG的情况并不多,也没有解决方案。这是什么意思?
编辑:我也注意到,当发生这种情况时,还有一个postgres进程,标有我的数据库名称和状态“IDLE in transaction”。我应该结束这个过程吗?
答案 0 :(得分:2)
如果您没有在开发服务器上运行它,那么错误很可能来自您的“打印”语句。例如,当通过mod_wsgi从Apache运行时,stdout文件描述符将被关闭,因此您无法正常“打印”。