2009-09-20 13 views
1

平臺:Python 2.5,Django開發根,PostgreSQL 8.4,Windows Vista Ultimate SP2。 過程:Django文檔,版本1.0,link text,第34.2節,提供初始SQL數據。Django syncdb上使用PostgreSQL的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服務器運行,當麻煩的初始數據文件從它的標準路徑移除回答有關其他型號的數據查詢。

創建表application1_aisc_customary 失敗安裝自定義SQL application1.aisc_customary模型 安裝自定義的SQL:

壞表的以前版本中使用的pgAdmin III,控制檯命令「蟒蛇manage.py執行syncdb」產生這個錯誤回落對於application1.aisc_customary模式:關係欄 「MTYPE」 「application1_aisc_customary」 不存在 LINE 1:INSERT INTO application1_aisc_customary(MTYPE,EDI_STD_NOME ...

一克拉點於M MTYPE的錯誤儘管如此,列。 (大寫)MTYPE 確實存在,如使用pgAdmin III可以看到的那樣。請注意,Django管理員報告該表,但它沒有記錄。

我已經嘗試了unicode和ANSI編碼爲SQL,採取可編輯=假關閉模型屬性和小寫名稱的一切,但模型屬性。也許我錯過了一些準備性的SQL語句。我正在醒目。我會非常感激一個啓發性的迴應。在此先感謝您的幫助。

09/21/09:有關記錄,zalew的答案是正確的。小寫字段名稱是必需的。我還必須將一個字段名稱,id(內徑)更改爲i_d,以便糾正與主鍵之間的明顯衝突。我將od改爲o_d以匹配。問題解決了。

+0

它不能解決你的問題,但爲什麼你加載SQL而不是初始數據夾具? – zalew 2009-09-20 03:40:23

+0

爲什麼不呢?也就是說,如果可以開展工作!將原始.csv數據庫重新轉換爲SQL很容易,所有名稱都在左側,所有值都在右側。我在Notepad ++中使用了宏。另一方面,JSON或YAML將需要一個簡短的Python腳本。不過,如果我無法弄清楚SQL的問題是什麼,那我會這麼做。我沒有意識到任何一種方法都有很大的優勢,因爲我建議在INSERT INTO命令之外不使用自定義SQL。可能SQL會加載更快,但這是一次性的事情,而不是考慮因素。 – 2009-09-20 06:06:29

+0

當然,我只問好奇:) – zalew 2009-09-21 11:36:06

回答

1

我跑了一個測試,結果和你一樣。 U必須使用小寫字段名稱才能工作。但是,您不必重寫sql,可以在sql中保留大寫字母,在模型定義中使用小寫字母,並且它可以正常工作!這很奇怪,因爲PgSql列名區分大小寫。另一方面,Django不會讓你有兩個字段 - 一個小寫字母和一個大寫字母(可能由於各種數據庫系統Django的工作原因而被阻塞),所以......仍然很奇怪:)

Can not儘管在這個問題上找到任何背景細節。只要按照小寫慣例。編輯模型字段以降低並運行你的sql。

+0

你的見解是答案,zalew。感謝您的幫助!小寫字段名稱使技巧。這是理想的,因爲大多數術語無論如何都接近小寫的標準,而且作爲工程師看起來更好。我做了一些更多的搜索,看到MySql不允許區分大小寫的字段名稱。也許Django希望小寫字段名稱,但將其轉換爲大寫字母以查詢任何DBMS。這是奇特的和意想不到的。我還看到,列名區分大小寫對於正在轉換到/從其他DBMS轉換的用戶來說通常是一個相當大的問題。 – 2009-09-21 19:35:30

0

嗯。在黑暗中拍攝,也許您的自定義SQL正在通過syncdb命令創建表之前執行?

+0

Django文檔說SQL代碼是在CREATE TABLE語句之後執行的。我傾向於認爲他們會考慮時間問題。不過謝謝你的想法。 – 2009-09-20 01:46:50

相關問題