Значение диспетчера контекста SQLAlchemy не возвращается - PullRequest
0 голосов
/ 18 октября 2018

У меня следующий код в попытке избежать дублирования кода управления сеансом.Проблема в том, что session.add в функции add_model дает мне None, потому что необходимо вызвать метод flush, чтобы session.add дал мне новый объект с его идентификатором.Я не могу понять, как обойти это.

Любая помощь будет принята с благодарностью.

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 голосов
/ 18 октября 2018

model не получает идентификатор до тех пор, пока не произойдет сброс или фиксация, но, поскольку вы уже фиксируете внутри своей функции, вы можете просто вернуть объект после фиксации, после чего SQLAlchemy обновит объект с помощьюпервичный ключ:

def add_model(model):
    with session_scope as session:
        db.session.add(model)
    return model
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...