如何通过递增某些字段来更新多个记录(在我的例子中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
最后,插入所需的行。
总时间 - 几分钟,而不是几天。
找到适合我自己的解决方案。
添加回答
举报
0/150
提交
取消