Ich benutze Peewee als ORM in einem kleinen Python-Skript mit einer MySQL DB.Peewee, MySQL und 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()
Wie Sie sehen können, habe ich den gleichen Schlüssel. Ich möchte es zum zweiten Mal mit der on_conflict
Methode (described in the API reference, aber nur für SQLite3) ignorieren, aber ich habe diesen Fehler, wenn das Skript ausgeführt wird (normal, weil nicht für MySQL implementiert):
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")
Wenn Ich entferne die .on_conflict(action='IGNORE')
, MySQL mag es auch nicht (Duplikatschlüssel). Wie kann ich peewee einen neuen Schlüssel einfügen oder ignorieren, wenn es sich um einen doppelten Schlüssel handelt?