如何通过增加某些字段(在我的例子中id
)来更新多个记录?
我错过了一条记录,整个 table 都移动了。
如何在一笔交易或一次查询中做到这一点?或者最快的方法是什么?
尝试了类似下面的方法,但速度太慢了。
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 条记录时,这并不复杂,但当你有数百万或数十亿条记录时,就会出现此问题。
最佳答案
为了能够在序列中插入文档,
我手动创建了 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
列。
最后,插入所需的行。
总时间 - 几分钟,而不是几天。
我自己找到了适合我的解决方案。
如果有人知道如何优化手动步骤 - 欢迎您添加评论或编辑此答案。
关于python - 如何使用 SqlAlchemy 增加多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63241287/