Я извлекаю json-файл из Интернета, который я хочу вставить в мою базу данных, используя peewee. Проблема в том, что некоторые из строк могут уже существовать в моей базе данных. Решение должно состоять в том, чтобы игнорировать или заменять повторяющиеся строки.Как я могу вставить несколько строк с помощью INSERT REPLACE в peewee?
Функция InsertQuery
поддерживает добавление нескольких строк, но я не могу понять, как подавить ошибки, которые экземпляр уже существует, или заменить существующий экземпляр.
Начиная с тестом пустой базы данных, я запускаю следующий код
from peewee import *
from peewee import InsertQuery
database = MySQLDatabase('test', **{'password': 'researchServer', 'user': 'root'})
class BaseModel(Model):
class Meta:
database = database
class Image(BaseModel):
url = CharField(unique=True)
database.connect()
database.create_tables([Image])
images= [{'url': 'one'}, {'url':'two'}]
try:
image_entry = InsertQuery(Image, rows=images)
image_entry.execute()
except:
print 'error'
Это не вызывает никаких ошибок и успешно добавляет «один» и «два» к моему столу.
Если я после этого бежать,
images= [{'url':'three'}, {'url': 'one'}, {'url':'four'}]
try:
image_entry = InsertQuery(Image, rows=images)
image_entry.execute()
except:
print 'error'
Выполнить функция выдает ошибку и ни «три» или «четыре» добавляются в базу данных.
Я полагаю, что одним из решений было бы проверить каждую строку, прежде чем добавлять ее в базу данных, но похоже, что это будет более неэффективно.
Если это не представляется возможным в PeeWee, я бы также хотел бы знать. – Cecilia
Я реализовал это для SQLite (который использует INSERT ИЛИ REPLACE INTO), поэтому добавление простого старого «REPLACE» может быть простым. Не стесняйтесь открывать билет github по адресу https://github.com/coleifer/peewee/issues/new – coleifer