SQLAlchemy上下文管理器值未返回

时间:2018-10-18 19:37:38

标签: python sqlalchemy

我尝试使用以下代码来避免不必要的会话管理代码重复。问题是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)

1 个答案:

答案 0 :(得分:2)

model直到刷新或提交后才获得ID,但是由于您已经在函数中进行了提交,因此只需在提交后返回对象,此时SQLAlchemy将更新该对象。具有主键的对象:

def add_model(model):
    with session_scope as session:
        db.session.add(model)
    return model