私はMySQLデータベースを備えたPythonの小さなスクリプトでORMとしてPeeweeを使用します。Peewee、MySQLとINSERT IGNORE
#!/usr/bin/python3
#coding: utf-8
import peewee
from peewee import *
db = MySQLDatabase(**config)
class Foo(peewee.Model):
bar = peewee.CharField(unique=True, null=False)
class Meta:
database = db
try:
Foo.create_table()
except:
pass
foo_data = [{'bar':'xyz'},{'bar':'xyz'}]
Foo.insert_many(foo_data).on_conflict(action='IGNORE').execute()
ご覧のとおり、私は同じキーを持っています。私は(だけSQLite3のため、described in the API reference)on_conflict
メソッドを使用して、それをもう一度無視したいのですが、(MySQLのために実装されていないので、通常の)私は、スクリプトを実行しているこのエラーを持っている:
peewee.ProgrammingError: (1064, "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 'OR IGNORE INTO `foo` (`bar`) VA' at line 1")
の場合私は.on_conflict(action='IGNORE')
を削除しますが、MySQLはそれを好きではありません(重複キー)。ピューニーに新しい鍵を挿入させたり、鍵が重複している場合は無視したりするにはどうすればよいですか?