2014-01-17 28 views
1

我有一个postgreSQL数据库,其中有一个表foo,我在django之外创建的。我用manage.py inspectdb为我建立表foo的模型。这种技术在我使用MySQL的时候工作的很好,但是对于PostgreSQL而言,它是错误的MISERABLY。该表是几千兆字节,我使用PostgreSQL'COPY'从一个文本文件构建它。django postgresql查询不起作用

我可以在表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。

+0

你的表和模型是怎样的? Django可能没有认识到那个列是PK,因此它会查找默认的“id”。你的模型应该有一个字段pimary_key = True – Alvaro

+0

谢谢你的帮助。你绝对正确。我从来没有设置主键。 –

回答

0

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

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

因此,如果您以后决定将字段添加到模型中,则必须手动更新数据库。

你需要做的是通过手工进行数据库管理,确保你的表有一个主键,并且主键的名字是“id”(尽管我不确定这是否是这样是必要的,最好这样做。)因此,使用数据库管理工具,修改您的表并添加主键,并将其命名为id。然后它应该开始工作。

+0

非常感谢您的帮助。 –