微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-Django DatabaseError-没有这样的保存点

我在Django应用程序中有一个Celery任务调用函数,该函数处理CSV文件中的每一行,并尝试使用模型将每一行的信息插入到Postgresql数据库中,如下所示:

reader = csv.DictReader(csvfile, dialect=csv.get_dialect('excel'))
for row_number, row in enumerate(reader):
    try:
        ...
        customer, created = Customer.objects.get_or_create(
            first_name = row['First Name'],
            last_name = row['Last Name'],
            email = row['Email'],
            account_owner = account_owner
        )
        ...
    except Exception, e:
        message = "%s: %s\n" % (type(e).__name__, e)
        sys.stderr.write("%s\n" % message)

在循环的第一次迭代中,在Customer.objects.get_or_create上出现以下错误
DatabaseError:没有这样的保存点

然后我得到DatabaseError:当前事务中止,命令被忽略,直到此后每次迭代的事务块结束为止.

我已经成功地将记录插入(手动使用sql)到该表中,该记录具有脚本将提供的相同信息.我也尝试过使用保存点,但是没有运气:

sid = transaction.savepoint()
customer, created = Customer.objects.get_or_create(
    first_name = row['First Name'],
    last_name = row['Last Name'],
    email = row['Email'],
    account_owner = account_owner
)
transaction.savepoint_commit(sid)

这是在我的从Homebrew安装Postgresql 9.1的开发机器上发生的.显然,主要目标是解决此问题,但是用于调试Celery任务或查找我的Postgres日志文件的任何有用的指针也都将有所帮助.

解决方法:

After doing some more research,它的根本原因似乎在IntegrityError中,该错误试图强制执行保存点回滚,该回退已不存在.我修复了IntegrityError,并假设没有保存点问题已解决.在调试时立即看到IntegrityError仍然很棒…

使用these instructions启用了日志记录,我发现get_or_create生成的insert语句违反了外键约束.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐