我发现随着我的sql表变得非常大(200万行),此代码成为了瓶颈。
def somefunc():
for row in df.iterrows():
updates = session.query(User).filter(User.id == id)
try:
somefunc()
for update in updates:
update.flag = 1
except:
for update in updates:
update.flag = 0
session.commit()
问题1 :我已经在木星笔记本中进行了测试,看起来就像在属性分配时提交了事务一样
for update in updates:
update.flag = 1
当我期望事务刷新到session.commit()
上的数据库时,为什么会这样?这导致sql在循环的每次迭代中执行查询,这是致命的。
问题2 :如何防止等到sql执行查询。我尝试了session.flush()
,但没有帮助。如果那最终不会破坏会话或数据库,并且查询是否要由mysql执行?