Где использовать session.commit () для запроса SELECT - SQLALchemy, Flask - PullRequest
0 голосов
/ 13 марта 2020

Мое приложение не обновляет базу данных - все запросы SELECT. Я изо всех сил пытаюсь справиться с прямыми изменениями в базе данных (т.е. открыть MySQLWorkbench и изменить там данные). Без session.commit() мое приложение Flask возвращает устаревшие данные.

Мое решение сейчас состоит в том, чтобы иметь session.commit() в качестве первой строки каждой конечной точки Flask, но я чувствую, что это неправильный способ справиться с этим.

Создание сеанса при запуске приложения:

engine = db.create_engine('mysql+pymysql://...')
connection = engine.connect()
metadata = db.MetaData()

Base = declarative_base()

Session = sessionmaker(autoflush=True)
Session.configure(bind=engine)
session = Session()

1 Ответ

0 голосов
/ 13 марта 2020

session.expire_all(), чтобы пометить все данные сеанса как просроченные. Затем, когда вы пытаетесь получить доступ к чему-либо, оно будет извлечено из базы данных.

session.expire(object) делает то же самое, но только для объектов

db.session.refresh(some_object) истекает и перезагружает все данные объекта

Хорошую статью об этом можно найти здесь: https://www.michaelcho.me/article/sqlalchemy-commit-flush-expire-refresh-merge-whats-the-difference

...