Django syncdb для исходных данных SQL с использованием PostgreSQL выдает «столбец… не существует»

StackOverflow https://stackoverflow.com/questions/1449984

  •  11-09-2019
  •  | 
  •  

Вопрос

Платформа:Python 2.5, корень разработки Django, PostgreSQL 8.4, Windows Vista Ultimate SP2.Процедура:Документация Django, версия 1.0, текст ссылки, Раздел 34.2, Предоставление исходных данных SQL.

КОД:

models.py:  

class aisc_customary(models.Model):
    MTYPE                 = models.CharField(max_length=4, editable=False, 
                                help_text="Shape type, e.g. W, C, L, etc.")
    EDI_STD_NOMENCLATURE  = models.CharField(max_length=26, editable=False, 
                                help_text="EDI shape designation")
    AISC_MANUAL_LABEL     = models.CharField(max_length=26, editable=False, primary_key=True, 
                                help_text="AISC Manual label")
    T_F                   = models.CharField(max_length=1, editable=False, 
                                help_text="Special note flag, T or F")
    W                     = models.FloatField(editable=False, 
                                help_text="Nominal weight, lbs/ft")
... (45 more FloatFields)


application1/sql/aisc_customary.sql:  

    INSERT INTO application1_aisc_customary (MTYPE, EDI_STD_NOMENCLATURE, AISC_MANUAL_LABEL, T_F, W, A, D, HT, OD, BF, B, ID, TW, TF, T, TNOM, TDES, KDES, KDET, K1, X, Y , E0, XP, YP, BF_2TF, B_T, H_TW, H_T, D_T, IX, ZX, SX, RX, IY, ZY, SY, RY, RZ, J, CW, C, WNO, SW, QF, QW, RO, H, TAN_ALPHA, QS) VALUES ('W', 'W44X335', 'W44X335', 'F', 335, 98.5, 44.0, 0, 0, 15.9, 0, 0, 1.03, 1.77, 0, 0, 0.00, 2.56, 2.63, 1.31, 0.00, 0.00, 0.00, 0.00, 0.00, 4.50, 0.00, 38.0, 0.00, 0.00, 31100, 1620, 1410, 17.8, 1200, 236, 150, 3.49, 0.00, 74.7, 535000, 0.00, 168, 1180, 278, 805, 0.00, 0.00, 0.00, 0.00);
    INSERT INTO application1_aisc_customary (MTYPE, EDI_STD_NOMENCLATURE, AISC_MANUAL_LABEL, T_F, W, A, D, HT, OD, BF, B, ID, TW, TF, T, TNOM, TDES, KDES, KDET, K1, X, Y , E0, XP, YP, BF_2TF, B_T, H_TW, H_T, D_T, IX, ZX, SX, RX, IY, ZY, SY, RY, RZ, J, CW, C, WNO, SW, QF, QW, RO, H, TAN_ALPHA, QS) VALUES ('W', 'W44X290', 'W44X290', 'F', 290, 85.4, 43.6, 0, 0, 15.8, 0, 0, 0.865, 1.58, 0, 0, 0.00, 2.36, 2.44, 1.25, 0.00, 0.00, 0.00, 0.00, 0.00, 5.02, 0.00, 45.0, 0.00, 0.00, 27000, 1410, 1240, 17.8, 1040, 205, 132, 3.49, 0.00, 50.9, 461000, 0.00, 166, 1040, 248, 701, 0.00, 0.00, 0.00, 0.00);
    INSERT INTO application1_aisc_customary (MTYPE, EDI_STD_NOMENCLATURE, AISC_MANUAL_LABEL, T_F, W, A, D, HT, OD, BF, B, ID, TW, TF, T, TNOM, TDES, KDES, KDET, K1, X, Y , E0, XP, YP, BF_2TF, B_T, H_TW, H_T, D_T, IX, ZX, SX, RX, IY, ZY, SY, RY, RZ, J, CW, C, WNO, SW, QF, QW, RO, H, TAN_ALPHA, QS) VALUES ('W', 'W44X262', 'W44X262', 'F', 262, 76.9, 43.3, 0, 0, 15.8, 0, 0, 0.785, 1.42, 0, 0, 0.00, 2.20, 2.25, 1.19, 0.00, 0.00, 0.00, 0.00, 0.00, 5.57, 0.00, 49.6, 0.00, 0.00, 24100, 1270, 1110, 17.7, 923, 182, 117, 3.47, 0.00, 37.3, 405000, 0.00, 165, 928, 223, 630, 0.00, 0.00, 0.00, 0.00);

... (1965 more lines like this)

Сервер разработки Django работает нормально, а сервер PostgreSQL работает и отвечает на запросы о данных других моделей, когда проблемный файл исходных данных удаляется из его стандартного пути.

В предыдущих версиях плохих таблиц, удаленных с помощью pgAdmin III, консольная команда «python Manage.py syncdb» выдает следующую ошибку:

Создание таблицы Application1_aisc_customary Установка пользовательской SQL для приложения1.AISC_CUSTOMARY Не удалось установить пользовательский SQL для приложения1.AISC_CUSTOMARY:Столбец "mtype" отношения "Application1_aisc_customary" не существует строки 1:INSERT INTO application1_aisc_customary (MTYPE, EDI_STD_NOME...

Карат указывает на букву M в MTYPE.Несмотря на ошибку, столбец (заглавные буквы) MTYPE делает существуют, как можно увидеть с помощью pgAdmin III.Обратите внимание, что администратор Django сообщает о таблице, но в ней нет записей.

Я попробовал кодировку Unicode и ANSI для SQL, взяв editable=False из атрибутов модели и имена в нижнем регистре для всего, кроме атрибутов модели.Возможно, мне не хватает какого-то подготовительного оператора SQL.Я вычеркиваю.Буду очень признателен за содержательный ответ.Заранее спасибо за вашу помощь.

21.09.09:Для справки: ответ Залева правильный.Нужны имена полей в нижнем регистре.Мне также пришлось изменить имя одного поля, id (внутренний диаметр) на i_d, чтобы исправить очевидный конфликт с первичным ключом.Я изменил od на o_d, чтобы соответствовать.Задача решена.

Это было полезно?

Решение

Я провел тест, результат тот же, что и у вас.Чтобы это работало, вы должны использовать имена полей в нижнем регистре.Однако вам не нужно переписывать sql, вы можете оставить в нем заглавные буквы, оставив строчные буквы в определении модели, и все будет работать нормально!что странно, поскольку имена столбцов PgSql чувствительны к регистру.С другой стороны, Django не позволит вам иметь два поля — одно строчное и одно заглавное с одинаковым именем (вероятно, заблокировано из-за различных систем баз данных, с которыми работает django), поэтому...все равно странно :)

Однако не удалось найти никаких подробностей по этому вопросу.Просто следуйте соглашению о нижнем регистре.Отредактируйте поля модели, чтобы опустить их и запустить sql.

Другие советы

Хм.Выстрел в темноте: возможно, ваш собственный SQL выполняется до того, как таблица будет создана с помощью syncdb команда?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top