2014-01-17 8 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» (хотя я не уверен, необходимо, это лучше сделать.) Поэтому используйте инструмент администрирования базы данных, измените свою таблицу и добавьте первичный ключ и назовите его идентификатор. Тогда он должен начать работать.

+0

Большое спасибо за вашу помощь. –

Смежные вопросы