如何通過遞增某些字段來更新多個記錄(在我的例子中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
提交
取消