Django syncdb使用PostgreSQL生成SQL初始数据;专栏。。。“不存在”;

Django syncdb使用PostgreSQL生成SQL初始数据;专栏。。。“不存在”;,sql,django,django-syncdb,Sql,Django,Django Syncdb,平台:Python 2.5、Django开发根目录、PostgreSQL 8.4、Windows Vista Ultimate SP2。 过程:Django文档,1.0版,第34.2节,提供初始SQL数据 代码: Django development server工作正常,当麻烦的初始数据文件从其标准路径中删除时,PostgreSQL server正在工作并回答有关其他模型数据的查询 使用pgAdmin III删除以前版本的坏表时,控制台命令“python manage.py syncdb”会产

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

代码:

Django development server工作正常,当麻烦的初始数据文件从其标准路径中删除时,PostgreSQL server正在工作并回答有关其他模型数据的查询

使用pgAdmin III删除以前版本的坏表时,控制台命令“python manage.py syncdb”会产生以下错误:

创建表格应用程序1\u aisc\u 安装应用程序1的自定义SQL。aisc_常规模型 未能为应用程序1安装自定义SQL。aisc_惯用模型:关系“application1_aisc_惯用”的“mtype”列不存在 第1行:插入应用程序1_aisc_惯用(MTYPE、EDI_标准名称

克拉指向M类型的M。尽管存在错误,但列(大写)MTYPE确实存在,这可以通过使用pgAdmin III看到。请注意,Django admin报告了该表,但它没有记录

我已经尝试了SQL的unicode和ANSI编码,去掉了模型属性中的editable=False,以及除模型属性以外的所有属性的小写名称。可能我遗漏了一些准备好的SQL语句。我要提醒一下。如果能得到启发性的答复,我将不胜感激。提前感谢您的帮助


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

Hmm。在黑暗中拍摄,可能是在通过
syncdb
命令创建表之前执行自定义SQL?

Hmm。在黑暗中拍摄,可能是在创建表之前执行自定义SQL通过
syncdb
命令?

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


但找不到此问题的任何背景详细信息。只需遵循小写惯例。编辑模型字段以降低并运行sql。

我运行了一个测试,结果与您相同。你必须使用小写字段名,这样它才能工作。但是,您不必重写sql,可以在sql中保留大写,在模型定义中保留小写,这样就可以很好地工作了!这很奇怪,因为PgSql列名区分大小写。另一方面,Django不允许您有两个字段-一个小写和一个大写,名称相同(可能由于Django使用的各种数据库系统而被阻止),因此。。。还是奇怪:)


但找不到此问题的任何背景详细信息。只需遵循小写惯例。编辑模型字段以降低并运行sql。

Django文档说sql代码在CREATE TABLE语句之后执行。我倾向于认为他们会考虑一下时机问题。不过,谢谢你的想法。Django文档说SQL代码是在CREATETABLE语句之后执行的。我倾向于认为他们会考虑一下时机问题。不过,感谢您的想法。这并不能解决您的问题,但是为什么要加载sql而不是初始数据的fixture呢?为什么不呢?也就是说,如果它能发挥作用的话!将原始的.csv数据库重新编译为SQL很容易,所有的名称都在左边,所有的值都在右边。我是用记事本++中的宏来实现的。另一方面,JSON或YAML将需要一个简短的Python脚本。不过,如果我不能找出SQL的问题所在,我会这么做。我不知道这两种方法有什么好处,因为我建议除了INSERT INTO命令之外,不要通过这个工具使用自定义SQL。SQL可能会加载得更快,但这是一次性的,不是考虑因素。当然,我只是出于好奇问:)这并不能解决您的问题,但为什么要加载SQL而不是初始数据的固定装置?为什么不?也就是说,如果它能发挥作用的话!将原始的.csv数据库重新编译为SQL很容易,所有的名称都在左边,所有的值都在右边。我是用记事本++中的宏来实现的。另一方面,JSON或YAML将需要一个简短的Python脚本。不过,如果我不能找出SQL的问题所在,我会这么做。我不知道这两种方法有什么好处,因为我建议除了INSERT INTO命令之外,不要通过这个工具使用自定义SQL。SQL可能加载得更快,但这是一次性的,不是考虑因素。当然,我只是出于好奇问:)你的洞察力就是答案,zalew。谢谢你的帮助!小写字段名扭转了局面。这是很理想的,因为大多数命名法都更接近标准的小写形式,而且对我这个工程师来说更好看。我做了更多的搜索,发现MySql不允许使用区分大小写的字段名。也许Django希望字段名使用小写,但对于任何DBMS的查询,都会将其转换为大写。这是奇怪的和出乎意料的。我还发现,对于MySQL用户来说,从其他DBMS转换到其他DBMS时,列名大小写敏感度通常是一个相当大的问题。谢谢你的帮助!小写字段名扭转了局面。这是很理想的,因为大多数命名法都更接近标准的小写形式,而且对我这个工程师来说更好看。我又做了一点
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)