1

平台: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 为 application1.aisc_customary 模型安装自定义 SQL 无法为 application1.aisc_customary 模型安装自定义 SQL:关系“application1_aisc_customary”的列“mty​​pe”不存在第 1 行:INSERT INTO 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 以匹配。问题解决了。

4

2 回答 2

1

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

虽然找不到有关此问题的任何背景详细信息。只需遵循小写约定即可。编辑模型字段以降低并运行您的 sql。

于 2009-09-21T11:35:39.287 回答
0

唔。在黑暗中射击,也许您的自定义 SQL 正在通过syncdb命令创建表之前执行?

于 2009-09-20T01:25:55.800 回答