SQLALCHEMY ORM Вставка или обновление при импорте из JSONPython

Программы на Python
Anonymous
SQLALCHEMY ORM Вставка или обновление при импорте из JSON

Сообщение Anonymous »

У меня есть модель SQLalchemy ORM, заполненная файлом JSON, которая иногда меняется. Файл JSON не предоставляет целочисленный первичный ключ, но имеет уникальный буквенно-цифровой код продукта. PrettyPrint-Override "> class ProductDescriptor(Base):
__tablename__ = 'product_descriptor'

id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
ProductCode: Mapped[str] = mapped_column(String(50), unique=True)

DisplayName: Mapped[str] = mapped_column(String(50))
Description: Mapped[str] = mapped_column(String(1000))
... more columns.
< /code>
Я искал ответ, указанный в Sqlalchemy Insert или Update (upsert), используя сеанс ORM, который имеет смысл до этой строки: < /p>
on_duplicate_stmt = insert_stmt.on_duplicate_key_update(dict(txt=insert_stmt.inserted.txt))
< /code>
, что, поскольку входящих данных не хватает ключа, мне нечего сравнивать. Нужно ли изменить определение кода продукта? На данный момент я использую уникальный = true. < /P>
В настоящее время мой код выглядит так: < /p>
product_list = []
for product in products:

# Create filtered list of dicts to be send to the DB
product_list.append({
'ProductName': product.get('ProductName'),
'DisplayName': product.get('DisplayName'),
'Description': product.get('Description'),
... more columns
})

insert_stmt = insert(ProductDescriptor).values(product_list)

# This is where it goes wrong
on_duplicate_stmt = insert_stmt.on_duplicate_key_update()

# Trying to deal with integrity errors and rollback requests
for product in product_list:
try:
self.session.add(resource)
self.session.commit()
except IntegrityError:
pass
< /code>

Как я могу эффективно создать обновление или создать функцию для объемных записей? Поле в поле ключа? Использовать метод Update_or_create, где я могу указать поле ключа и предоставить словарь по умолчанию.Profile.objects.update_or_create(custid=user_profile.custid, defaults=defaults)


Подробнее здесь: https://stackoverflow.com/questions/793 ... -from-json

Вернуться в «Python»