1

プラットフォーム:Python 2.5、Django開発ルート、PostgreSQL 8.4、Windows VistaUltimateSP2。手順: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サーバーは動作し、他のモデルのデータに関するクエリに応答します。

以前のバージョンの不良テーブルがpgAdminIIIを使用して削除された場合、コンソールコマンド「pythonmanage.pysyncdb」で次のエラーが発生します。

テーブルapplication1_aisc_customaryの作成application1.aisc_customaryモデルのカスタムSQLのインストールapplication1.aisc_customaryモデルのカスタムSQLのインストールに失敗しました:リレーション「application1_aisc_customary」の列「mtype」が存在しません行1:INSERT INTO application1_aisc_customary(MTYPE、EDI_STD_NOME .. ..

カラットはMTYPEのMを指しています。エラーにもかかわらず、 pgAdmin IIIを使用して見られるように、列(大文字)のMTYPEは存在します。Django管理者がテーブルを報告しますが、レコードがないことに注意してください。

SQLのユニコードとANSIエンコーディングを試し、editable = Falseをモデル属性から外し、モデル属性以外のすべての名前を小文字にしました。たぶん私はいくつかの準備的なSQLステートメントが欠けています。私は印象的です。啓蒙的な対応をいただければ幸いです。よろしくお願いします。

09/21/09:記録として、zalewの答えは正しいです。小文字のフィールド名が必要です。また、主キーとの明らかな競合を修正するために、1つのフィールド名id(内径)をi_dに変更する必要がありました。それに合わせてodをo_dに変更しました。問題が解決しました。

4

2 に答える 2

1

私はあなたと同じ結果でテストを実行しました。Uは、機能するように小文字のフィールド名を使用する必要があります。ただし、SQLを書き直す必要はなく、SQLに大文字を残し、モデル定義に小文字を含めることができ、問題なく機能します。PgSql列名では大文字と小文字が区別されるため、これは奇妙なことです。一方、Djangoでは2つのフィールドを使用できません。1つは小文字で、もう1つは同じ名前の大文字です(djangoが動作するさまざまなdbシステムのためにブロックされている可能性があります)。

ただし、この問題の背景の詳細​​は見つかりません。小文字の規則に従ってください。モデルフィールドを編集して、SQLを下げて実行します。

于 2009-09-21T11:35:39.287 に答える
0

うーん。暗闇の中で撮影しましたsyncdb。コマンドを使用してテーブルを作成する前に、カスタムSQLが実行されている可能性がありますか?

于 2009-09-20T01:25:55.800 に答える