2016-04-11 7 views
0

として0を返すことは私のコードであるUPDATEは常にここlastrowid

Column Type Comment 
id int(11) Auto Increment 
ip_address int(10) unsigned  
hostname varchar(256) NULL  
ip_location_id int(11) NULL  
Indexes 
PRIMARY id 
INDEX ip_location_id 

私はINSERT操作のすべてが魔法のように動作させる、 けど私がUPDATE操作を試みると、4回の試行(印刷)がすべて失敗します(印刷0)。 私は何が間違っているのか分かりません。 ありがとう

答えて

0
cur.execute('SELECT LAST_INSERT_ID()') 

この行はすべてです。あなたがそれを要求しても、最後のレコードの自動インクリメント値はが挿入されています。が挿入されています。更新を行うと、そのインデックスの自動インクリメント値は変更されていないため、現在のクエリに対して生成される値はありません。

新しい行を挿入した場合にのみ有効です。この値を取得したい場合は、max(id)を選択するかスキーマを調べることができますが、実際に行うことはほとんどありません。

+0

https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-lastrowid.htmlそれはUPDATE操作でも更新されるべきです – azDev

+0

それはmysql_insert_id()をカプセル化します: "AUTO_INCREMENTフィールドを含むテーブルにINSERT文を実行した後、またはLAST_INSERT_ID(expr)で列値を設定するためにINSERTまたはUPDATEを使用した後に、この関数を使用してください。あなたの更新はSQL関数LAST_INSERT_IDを使ってその値を設定していなかったので、結果はゼロになります。 – Mike

+0

最終更新IDを取得するにはどうすればよいですか? max(id)は無関係です。なぜなら、UPDATEはどの行にもできるからです。 – azDev

関連する問題