我在项目中使用sqlalchemy作为orm。我的问题是每次我使用session.refresh(obj)时都会使用新的数据库连接,直到调用session.close()为止。 因此,当我想刷新多个对象时,我很快就会耗尽连接。
会话制作者:
session = session_maker()
try:
yield session
session.commit()
for obj in session:
session.refresh(obj)
except Exception as e:
session.rollback()
raise e
finally:
session.close()
用法:
with make_session(...) as session:
for mapped in [self._mapper.map(obj) for obj in objects]:
saved_entities.append(mapped)
session.add(mapped)
session.flush()
我正在使用刷新,因为我的列已在更新时填充,我想返回当前值。
奇怪的是,当我这样做时:
for obj in session:
session.commit()
session.refresh(obj)
只使用了两个连接(很好),但对象没有数据。
答案 0 :(得分:0)
使用scoped_session,请参阅http://docs.sqlalchemy.org/en/latest/orm/contextual.html
如果这样做,每次请求时都会得到相同的会话(连接ID)。此外,您不需要调用refresh():add()和flush()应该足够,更新后的值应该在flush()之后和commit()之前可用,但前提是你只需要#39 ;使用相同的会话ID(数据库事务)来查找它们(因此,您需要一个scoped_session)。