Python PostgreSQL事务错误

时间:2011-04-11 12:20:47

标签: python django postgresql django-models django-orm

我正在尝试使用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”。我应该结束这个过程吗?

1 个答案:

答案 0 :(得分:2)

如果您没有在开发服务器上运行它,那么错误很可能来自您的“打印”语句。例如,当通过mod_wsgi从Apache运行时,stdout文件描述符将被关闭,因此您无法正常“打印”。