为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 SqlAlchemy 增加多行

如何使用 SqlAlchemy 增加多行

神不在的星期二 2023-04-25 17:05:15
如何通过递增某些字段来更新多个记录(在我的例子中id)?我错过了一张唱片,整张桌子都动了。如何在一笔交易或一次查询中做到这一点?或者最快的方法是什么?试过类似下面的东西,但它太慢了。rows = session.query(Table).all()for row in rows:    row.id = row.id + 1    session.commit()还尝试使用类似的东西,但它对我不起作用:session.query(Table)\    .filter(Table.id == row.id)\    .update({'id': row.id + 1})我拥有的数据示例: ID   Value   1       A  2       B  3       C               < -- D is missing here  4       E  5       F在这里,如果字母表应该D有 ID=4,那么我需要递增E和F。当你有 5 条记录时,这并不复杂,但当你有数百万或数十亿条记录时,问题就会出现。
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

为了能够在序列中插入文档,

我手动创建了new_id列并将其添加到Table模型中


new_object_id = 4


session.query(Table) \

    .filter(Table.id < new_object_id)\

    .update({Table.new_id: Table.id})


session.query(Table) \

    .filter(Table.id >= new_object_id)\

    .update({Table.new_id: Table.id + 1})

在这些操作之后,您应该能够看到 id 序列中的一个“漏洞”。


然后,在单独的查询中,手动重命名列id->old_id和new_id-> id。使用所有属性(主键、唯一性等)

更新了新“创建”的列。 删除的列。id

old_id


最后,插入所需的行。


总时间 - 几分钟,而不是几天。


找到适合我自己的解决方案。

查看完整回答
反对 回复 2023-04-25
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信