【问题标题】:Django sql/syncdb commands fail with PostgreSQL backendDjango sql/syncdb 命令因 PostgreSQL 后端而失败
【发布时间】:2013-04-09 13:56:51
【问题描述】:

我正在尝试将基于 MySQL 的 Django 项目迁移到 PostgreSQL。不幸的是,一旦我在 settings.py 中切换数据库后端,所有 sql/syncdb 命令都会失败。

python manage.py sql profile 带 MySQL:

BEGIN;
CREATE TABLE `profile_department` (
     `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
     `name` varchar(100) NOT NULL UNIQUE,
     [...]

python manage.py sql profile 带 PostgreSQL (psycopg2):

DatabaseError: relation "profile_department" does not exist
LINE 1: ...nt"."homepage", "profile_department"."gd_id" FROM "profile_d...
                                                         ^

为什么 Django 对两个数据库后端的行为不同?

【问题讨论】:

  • 查看数据库时有没有表?
  • 请显示为 Postgres 执行的 create table 语句(它不是您发布的那个)。
  • 生成sql时为什么要从DB查询?看起来你有一个在模块加载时触发的查询......啧啧......
  • 不,数据库仍然是空的——这是意料之中的,因为sql 命令只打印 SQL 语句。 – 使用 PostgreSQL 语句时没有 CREATE TABLE 语句 – 只有这个错误消息。 – 我不是从数据库查询,只是尝试在我的新(空)PostgreSQL 数据库中创建表(如果成功,我将清理数据库并发出syncdb 命令从 JSON 夹具加载数据(使用 dumpdata 从 MySQL 数据库创建)。

标签: django postgresql


【解决方案1】:

Thomas 是对的,确实有两个查询隐藏在 models.py 中的某个地方,它们引用了 Department 类:

ROOT_DEPARTMENT = Department.objects.get(pk=14)
FACULTIES = Department.objects.filter(parent=ROOT_DEPARTMENT)

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2015-04-11
    • 2014-02-22
    相关资源
    最近更新 更多