使用PostgreSQL对SQL初始数据进行Django syncdb会产生“列......不存在”

时间:2009-09-20 01:00:50

标签: sql django django-syncdb

平台:Python 2.5,Django开发root,PostgreSQL 8.4,Windows Vista Ultimate SP2。 过程:Django文档,1.0版,link text,第34.2节,提供初始SQL数据。

CODE:

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 为application1.aisc_customary模型安装自定义SQL 无法为application1.aisc_customary模型安装自定义SQL:关系“application1_aisc_customary”的列“mty​​pe”不存在 第1行:插入application1_aisc_customary(MTYPE,EDI_STD_NOME ......

克拉指向MTYPE的M.尽管存在错误,但是柱(大写)MTYPE 确实存在,如使用pgAdmin III可见。请注意,Django管理员报告该表,但它没有记录。

我已经尝试了SQL的unicode和ANSI编码,从模型属性中获取了editable = False,并且除了模型属性之外的所有内容都使用了小写名称。也许我错过了一些预备性的SQL语句。我正在罢工。我非常感谢你的回应。在此先感谢您的帮助。

09/21/09:为了记录,zalew的回答是正确的。需要小写字段名称。我还必须将一个字段名称id(内径)更改为i_d,以便纠正与主键的明显冲突。我将od更改为o_d以匹配。问题解决了。

2 个答案:

答案 0 :(得分:1)

我进行了测试,结果和你一样。 U必须使用小写字段名称才能使用。但是,你不必重写sql,可以在sql中保留大写,在模型定义中使用小写,它会工作得很好!这很奇怪,因为PgSql列名称区分大小写。另一方面,Django不会让你有两个字段 - 一个小写字母和一个大写字母具有相同的名称(可能因django使用的各种数据库系统而被阻止),所以...仍然很奇怪:)

但是在这个问题上找不到任何背景细节。只需按照小写惯例。编辑模型字段以降低并运行sql。

答案 1 :(得分:0)

嗯。在黑暗中拍摄,也许您的自定义SQL在通过syncdb命令创建表之前执行?