Я использую Peewee как ORM в небольшом скрипте Python с БД MySQL.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()
Как вы можете видеть, у меня такой же ключ. Я хотел бы, чтобы игнорировать его во второй раз, используя метод on_conflict
(described in the API reference, но только для SQLite3), но у меня есть эта ошибка при запуске скрипта (нормальный, потому что не реализована для 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 ему не нравится (дубликат ключа). Как я могу заставить peewee вставить новый ключ или игнорировать его, если это дубликат ключа?