【问题标题】:What should a Django user know when moving from MySQL to PostgreSQL?从 MySQL 迁移到 PostgreSQL 时,Django 用户应该知道什么?
【发布时间】:2011-02-06 13:06:12
【问题描述】:

到目前为止,我使用 Django 的大部分经验都是使用 MySQL 和 mysqldb。对于我正在编写的一个新应用程序,我正在将脚趾浸入 PostgreSQL 水中,现在我有了seen the light

在编写数据导入脚本时,我偶然发现了默认自动提交行为的问题。我猜可能还会出现其他“陷阱”。我还应该注意什么?

【问题讨论】:

  • 感谢您提出这个问题 - 我正在考虑迁移到 PostgreSQL,并且也会遇到任何这些问题,但不知道它们是什么。

标签: mysql django postgresql psycopg2


【解决方案1】:

Django 的自动提交和默认的 PostgreSQL 提交模式不一致。

开箱即用,Django 使用默认的 PostgreSQL 模式“已提交”,它将所有操作组合成一个事务,当 db 游标超出范围时结束。当这一系列操作期间发生错误时,就会出现问题。 Postgres 希望您在继续之前发出回滚,如果您不这样做,psycopg2 会在您下次使用连接时抛出 InternalError。如果您依赖 Django 自动提交(默认),您可能无法正确回滚。

幸运的是,psycopg2 支持另一种称为“自动提交”的操作模式,其中它不会设置这些事务。对于那些来自 MySQL(或试图同时支持两者)的人来说,这给世界带来了一些理智。在 1.1 中,他们增加了对公开它的支持。将以下内容添加到您的设置中(如果您在中继上,则需要更改 1.2 syntax

DATABASE_OPTIONS = {
    "autocommit": True,
}

关于 Django 票 #3460 的讨论列出了具体细节。


【讨论】:

    猜你喜欢
    • 2010-09-30
    • 2013-04-07
    • 2018-02-05
    • 2017-02-14
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2010-09-06
    相关资源
    最近更新 更多