2017-10-12 20 views
1

私はdjangoプロジェクトでpymssqlを使用してデータベースに接続しています。 私はexecute()メソッドを使って挿入をしようとしています。pymssql INSERTは自動インクリメントIDではありません

Cannot insert the value NULL into column 'ID', table ITEMS

ID列が主キーであるので、それは私が理解し、SQL自体によって満たされる必要があります。
は、しかし、私はこのエラーを取得します。ここ は私のINSERTコマンドである:

bill_id = execute(""" 
     INSERT INTO ITEMS(COlUMN1,COlUMN2, COlUMN3,COlUMN4,COlUMN5) 
     VALUES (%d, %d, %d, %d, %d); 
     """, (1713, 6, 929, 1184, 25)) 

と、これらの列のいずれもがIDです。 誰でも何が間違っているのか教えていただけますか?

+1

なぜデータベースと対話するためにDjangoモデルを使用しないのですか? – mhawke

+0

@mhawke私はそれを行うことはできません。私はむしろ大きなプロジェクトに取り組んでおり、それは私の声ではありません。 –

+1

テーブルがDjangoによって作成されなかった場合、IDフィールドには 'AUTO_INCREMENT'が設定されていないことがあります。 idを指定するか、列が自動的に増分するように変更する必要があります。 – Alasdair

答えて

3

idカラムが自動インクリメントキーカラムでない場合、それは機能しません。 CREATE TABLEステートメント内でSQL内の列を定義すると、自動的に自動インクリメント列ではありません。定義する必要があります。おそらく最初にid列の最大値を取得するクエリを作成する必要があります。 2番目に値をインクリメントして、insert文にプライマリカラムを追加することができます。

このリンクはdjangoメタデータAPIを使用するために見つかりました。

https://docs.djangoproject.com/en/1.9/ref/models/meta/#migrating-from-the-old-api

+0

ありがとう、それは私が最終的にしたものですが、私はまだIDがSQLによって設定されていない理由を理解できません。列は自動的にインクリメントされるので、それだけでインクリメントする必要があります。 –

+0

これはMySQLデータベースです。 – michaeldbjava

+0

次の表を見て、テーブルの構造を見てください。 https://dev.mysql.com/doc/refman/5.7/en/show-columns.html – michaeldbjava

関連する問題