0

プログラムをPythonで実行すると、このエラーが発生します。これが私のデータベースの表です:

Field           Type            Collation       Null        Key     Default     
articleCode   varchar(25)    latin1_swedish_ci   NO         UNI                                                
dateReceived   datetime            NULL          NO         MUL     0000-00-00 00:00:00                  
s100RSD        datetime            NULL          YES                0000-00-00 00:00:00        
remarks        longtext      latin1_swedish_ci   YES                        

そして、私のプログラムの問題を単純化するために、ここでエラーを起こすプログラムの部分を分離します:

import MySQLdb

def main():
    dateReceived = '2011-10-07 01:06:30'
    articleCode = 'name'
    s100rsd = '2011-10-07 01:06:30'
    remark_text = 'This is a remark'
    db = MySQLdb.connect('server', 'user', 'passwd', 'table_name', port)
    cur = db.cursor()
    db_query = cur.execute("INSERT INTO tblS100CurrentListing (articleCode, dateReceived, s100RSD, remarks) VALUES ('articleCode', 'dateReceived', 's100rsd', 'remark_text')")
    cur.close()
    db.close()

if __name__ == '__main__':
    main()

これが私が得るエラーです:_mysql_exceptions.IntegrityError:(1062、"キー1の重複エントリ'2147483647'")

ご協力ありがとうございます!

4

4 に答える 4

2

実際の値ではなく、データベースに定数を挿入しているようです。代わりに、次のようなものを試してください。

db_query = cur.execute("INSERT INTO tblS100CurrentListing " +
    "(articleCode, dateReceived, s100RSD, remarks) VALUES (%s, %s, %s, %s)", 
    (articleCode, dateReceived, s100rsd, remark_text))
于 2012-07-11T06:09:48.220 に答える
2

これは、キーの制限が原因で発生します。INTEGERの場合、2147483647が制限です。BIGINTまたはINTEGERより大きいもののようなものを選択できます。2147483647以降のすべてのレコードは、値2147483647に書き込もうとします。したがって、この問題が発生しているのはこのためです。BIGINT/LARGEINTなどで変更してください。

それが役に立てば幸い。

于 2012-09-07T15:26:17.283 に答える
1

フィールド「articleCode」の一意のキーにより、 MySQLがこの列に同じ内容の2つのレコードを持つことができなくなります。最初のプログラム実行時にすでに挿入したようです。

articleCode ='name'で以前に挿入されたレコードを削除するか、 articleCodeフィールドのUNIQUE KEYを削除するか、articleCodeの別の値を挿入してみてください。

お役に立てれば!

于 2012-07-11T06:09:48.903 に答える
0

他の回答で説明されているようにコードを修正した後、auto_incrementカウンターをリセットするためにテーブルを変更する必要があります。

ALTER TABLE tblS100CurrentListing auto_increment=1

カウンタを可能な限り低い値にリセットする必要があります。

テーブルから誤った値を削除または修復する必要があります。そうしないと、変更による影響はありません。

さらに、auto_incrementに設定されているフィールドを挿入する必要が本当にありますか?それとも、これは復元プロセスの一部ですか?それ以外の場合、2つのことは冗長です。データを自動的に取得するか、挿入するかのどちらかです。両方とも(見られるように)競合につながる可能性があります。

于 2012-07-11T07:27:37.577 に答える