【问题标题】:django postgresql query not workingdjango postgresql 查询不工作
【发布时间】:2014-02-07 05:52:09
【问题描述】:

我有一个 postgreSQL 数据库,其中有一个表 foo 我在 django 之外创建的。我使用manage.py inspectdb 为我构建了表foo 的模型。当我使用 MySQL 时,这种技术效果很好,但使用 PostgreSQL 时,它却失败了。该表是数 GB 的,我使用 PostgreSQL 'COPY' 从文本文件构建它。

我可以在表 foo 上运行原始查询,一切都按预期执行。

例如

foo.objects.raw('bar_sql')

按预期执行。

但是运行如下查询:

foo.objects.get(bar=bar)

投掷

ProgrammingError column foo.id does not exist LINE 1: SELECT "foo"."id", "foo"."bar1", "all_...

foo 天生没有id 字段。据我了解,django 应该创建一个。在 django 之外创建表时,我是否有些颠覆了这一步?

在填充了表的模型上运行的查询在所有情况下都会按预期运行 django。

我在这里遗漏了一些非常基本的东西,我们将不胜感激。

我正在使用 django 1.6 和 postgreSQL 9.3。

【问题讨论】:

  • 你的桌子和模型看起来怎么样? Django 可能无法识别哪个列是 PK,因此它会查找默认值“id”。你的模型应该有一个 pimary_key =True 的字段
  • 感谢您的帮助。你完全正确。我从不设置主键。

标签: python mysql sql django postgresql


【解决方案1】:

Django 不会修改您现有的数据库表。它只创建新表。如果您有现有的表,它通常根本不会触及它们。

“据我所知,django 应该创建一个。” --> 它只在创建表时将主键添加到表中,这意味着您无需在模型中明确指定,但它不会对现有表执行任何操作。

因此,例如,如果您稍后决定向模型添加字段,则必须手动更新数据库。

在您的情况下,您需要做的是通过手动数据库管理确保您的表有一个主键,并且主键的名称是“id”(虽然我不确定这是否是必要,最好这样做。)所以使用数据库管理工具,修改你的表并添加主键,并将其命名为 id。然后它应该开始工作了。

【讨论】:

  • 非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
相关资源
最近更新 更多