我尝试使用以下代码来避免不必要的会话管理代码重复。问题是session.add
函数中的add_model
给了我None
,因为需要调用flush
方法,以便session.add
给我新对象与它的ID。我不知道如何解决这个问题。
任何帮助将不胜感激。
from contextlib import contextmanager
@contextmanager
def session_scope():
"""Provide a transactional scope around a series of operations."""
session = Session()
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
session.close()
def add_model(model):
with session_scope as session:
return db.session.add(model)
答案 0 :(得分:2)
model
直到刷新或提交后才获得ID,但是由于您已经在函数中进行了提交,因此只需在提交后返回对象,此时SQLAlchemy将更新该对象。具有主键的对象:
def add_model(model):
with session_scope as session:
db.session.add(model)
return model