我的大部分Django的经验,迄今已与MySQL和MySQLdb的。对于新的应用程序,我写的,我倾我的脚趾在PostgreSQL的水,现在我有的看到的光

在写一个数据导入脚本,我偶然发现了与默认的自动提交行为的问题。我猜想还有其他“陷阱”可能出现。我应该是在寻找什么呢?

有帮助吗?

解决方案

<强>有Django的自动提交和默认的PostgreSQL之间的不一致性提交模式。

开箱,Django使用缺省的PostgreSQL模式“读提交”它结合了所有操作成当分贝光标超出范围即端部的单个事务。当一系列的操作过程中发生错误,就会出现问题。 Postgres的希望您能继续之前发出回滚,如果你不这样做,psycopg2抛出的InternalError下次去使用的连接时间。如果你依赖于Django的自动提交(默认),你可能不会正确回滚。

幸运的是,psycopg2具有用于另一操作模式中被称为“自动提交”,其中它不设置这些交易了支持。对于那些从MySQL未来的(或试图支持),这会带来一些理智的世界。在1.1中加入他们的支持,揭露它。以下添加到您的设置(需要改变的 1.2语法如果你是在主干)

DATABASE_OPTIONS = {
    "autocommit": True,
}

有关的Django票的讨论#3460 勾画出粗砂的信息。


许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top