2014-01-17 62 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

非常感謝您的幫助。 –