Я вставляю/обновляю объекты в базу данных MySQL, используя peewee ORM для Python . У меня есть такая модель:
class Person(Model):
person_id = CharField(primary_key=True)
name = CharField()
Я создаю объекты/строки с помощью цикла, и каждый раз в цикле есть словарь, например:
pd = {"name":"Alice","person_id":"A123456"}
Затем я пытаюсь создать объект и сохранить его.
po = Person()
for key,value in pd.items():
setattr(po,key,value)
po.save()
Это занимает некоторое время для выполнения и выполняется без ошибок, но ничего не сохраняется в базе данных — записи не создаются.
Это работает:
Person.create(**pd)
Но также выдает ошибку (и завершает работу скрипта), когда первичный ключ уже существует. Прочитав руководство, я подумал, что функция save()
Мне нужно было, чтобы эта крошка выполнила обновление или вставку по мере необходимости.
Не уверен, что мне нужно сделать здесь - попробовать сначала получить каждую запись? Отловить ошибки и попробовать обновить запись, если она не может быть создана? Я новичок в peewee и обычно пишу просто INSERT ... ON DUPLICATE KEY UPDATE
или даже REPLACE
.