如何使用 SqlAlchemy 增加多行

如何通过递增某些字段来更新多个记录(在我的例子中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 条记录时,这并不复杂,但当你有数百万或数十亿条记录时,问题就会出现。


神不在的星期二
浏览 85回答 1
1回答

慕莱坞森

为了能够在序列中插入文档,我手动创建了new_id列并将其添加到Table模型中new_object_id = 4session.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。使用所有属性(主键、唯一性等)更新了新“创建”的列。 删除的列。idold_id最后,插入所需的行。总时间 - 几分钟,而不是几天。找到适合我自己的解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python