【发布时间】:2023-09-12 06:20:02
【问题描述】:
我有以下代码,试图不必有重复的会话管理代码。问题是add_model 函数中的session.add 给了我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)
【问题讨论】:
-
你想让
add_model()返回什么? -
嗨@jwodder。我希望它返回添加的模型对象,并带有 id。当我调用这个函数 fwiw 时,我可以看到一个新行确实被持久化到我的数据库中。
-
session.add给你None因为它不返回任何东西(但在这种情况下,函数在Python 中隐式返回None)。它不会为您提供带有 id 的新对象。 -
好的,谢谢。我对
session.add工作原理的心智模型并不完全正确。
标签: python sqlalchemy