小编ske*_*n3r的帖子

SQLAlchemy 在一个事务中更新多行

如何使用将一列的现有值映射到另一列所需的新值的字典更新数据库中的多个现有行?

我有一张桌子:

class MyTable(BaseModel):
    col1 = sa.Column(sa.String(256))
    col2 = sa.Column(sa.String(256))
Run Code Online (Sandbox Code Playgroud)

鉴于col1已经有值并且col2为空,col2如果我将数据集作为字典,我该如何更新:

payload = {'x': 'y', 'a': 'b', 'c': 'd'}
Run Code Online (Sandbox Code Playgroud)

因此,此有效负载将 , 的值映射col1到 的col2;更新后,您[{'col1': 'x', 'col2': 'y'}, ...]将从数据库中获得。

我尝试了几种方法,它们实际上有效,但我认为它们并不像它可能的那样最佳:

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)
Run Code Online (Sandbox Code Playgroud)

或者像这样

for key, value in payload.items():
    query = session.query(MyTable).filter(MyTable.col1==key)
    query.update({MyTable.col2: value})
Run Code Online (Sandbox Code Playgroud)

现在这两种解决方案都按预期工作,唯一困扰我的是它所花费的时间,例如,对于 100 个元素的有效载荷,它最多需要 6 秒,我几乎可以肯定应该有更好的方法这样做,不是吗? …

python sqlalchemy sql-update

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

python ×1

sql-update ×1

sqlalchemy ×1