前提・実現したいこと
pythonからmysqlを操作し
table内のUNIQUEキーが重複したらUPDATE
重複しなければINSERTしたい。
INSERT ~ ON DUPLICATE KEY UPDATE
を使用すれば可能とのことだったが、どうしてもうまくいきません。
助けてください。。。
以下、gをUNIQUEキーとしてgの重複有無
発生している問題・エラーメッセージ
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near...
該当のソースコード
python
1import mysql.connector 2 3table_name = "test" 4db_settings = { 5 "host":"localhost", 6 "database":"test01", 7 "user":"testuser", 8 "password":"******", 9 "port":3306 10} 11 12conn = mysql.connector.connect(**db_settings) 13cur = conn.cursor() 14sql = "INSERT INTO table_name ( a, b, c, d, e, f, g) VALUES (%(a)s, %(b)s, %(c)s, %(d)s, %(e)s, %(f)s, %(g)s) ON DUPLICATE KEY UPDATE d = values(d),e = values(e),f = values(f)" 15 16#info内は辞書tuple 17info = [{ a:int01, b:text02, c:text03, d:int04, e:int05, f:int06, g:text07}, 18 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}, 19 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}, 20 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}, 21 {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}, 22 ... 23 ] 24 25for content in info: 26 cur.execute(sql,{ 27 'a':content['a'], 28 'b':content['b'], 29 'c':content['c'], 30 'd':content['d'], 31 'e':content['e'], 32 'f':content['f'], 33 'g':content['g'], 34 'd':content['d'], 35 'e':content['e'], 36 'f':content['f'], 37 }) 38 39conn.commit() 40conn.close
補足情報(FW/ツールのバージョンなど)
table内は以下
mysql> show fields from test;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| a | int(11) | NO | PRI | NULL | auto_increment |
| b | text | YES | | NULL | |
| c | text | YES | | NULL | |
| d | int(11) | YES | | NULL | |
| e | int(11) | YES | | NULL | |
| f | int(11) | YES | | NULL | |
| g | text | YES | UNI | NULL | |
+---------+--------------+------+-----+---------+----------------+
追記
以下、insert文で実行すると問題なくDBへのinsertが行われています。
INSERT ~ ON DUPLICATE KEY UPDATE文でエラーを起こしているとは思うのですが、、、
わかりません。。
python
1sql_insert = 'insert into test values(%(a)s, %(b)s, %(c)s, %(d)s, %(e)s, %(f)s, %(g)s' 2cur.execute(sql_insert,{ 3 'a':content['a'], 4 'b':content['b'], 5 'c':content['c'], 6 'd':content['d'], 7 'e':content['e'], 8 'f':content['f'], 9 'g':content['g'], 10 })