Как я могу обновить несколько существующих строк в базе данных, используя словарь, который сопоставляет существующие значения для одного столбца с необходимыми новыми значениями для другого столбца?
У меня есть таблица:
class MyTable(BaseModel):
col1 = sa.Column(sa.String(256))
col2 = sa.Column(sa.String(256))
Учитывая, что col1
уже имеет значения и col2
пусто, как я могу обновить col2
, если у меня есть набор данных в качестве словаря:
payload = {'x': 'y', 'a': 'b', 'c': 'd'}
Итак, эти карты полезной нагрузкизначения для col1
, для новое значение для col2
;после обновления вы получите [{'col1': 'x', 'col2': 'y'}, ...]
из базы данных.
Я попробовал несколько способов, которые на самом деле работают, но я думаю, что они не так оптимальны, как это могло бы быть, например: * 10101
my_table = MyTable.__table__
for key, value in payload.items():
stm = my_table.update()
stm = stm.where(getattr(sales_order_item.c, 'col1') == key)
stm = stm.values({'col2': value})
session.execute(stm)
Или вот так
for key, value in payload.items():
query = session.query(MyTable).filter(MyTable.col1==key)
query.update({MyTable.col2: value})
Теперь оба эти решения работают, как и ожидалось, единственное, что меня беспокоит, это время, которое требуется, например, для полезной нагрузки в 100 элементов, которая занимает до 6секунд, и я почти уверен, что должен быть лучший способ сделать это, не так ли?
Я думал, есть ли способ заставить его работать с функцией in_
:
query(MyTable).filter(
MyTable.col1.in_(payload.keys())
)
но я не знаю, как структурировать запрос на обновление.