Получение старых значений из запроса ORM - PullRequest
0 голосов
/ 22 июня 2019

У меня ниже настройки БД в моем коде.В моем коде немного API и немного контроллеров, которые будут обслуживать шаблоны и соответствующие обработчики POST.Проблема в том, что когда я вызываю /details?stu_id=abcd, вызывается декоратор обработчика, и у меня есть запрос БД, чтобы проверить, присутствует ли данный stu_id в моей таблице (Студент).Я случайно получаю переданный идентификатор не существует в моей таблице ошибок.Но когда я проверил вручную его настоящее.после нескольких обновлений работает нормально.Я не вижу этой проблемы в API

Иногда это происходит на более поздних этапах страниц.Я обновляю статус в каждом движении страницы.Когда я читаю состояние из той же таблицы, используя методы StuHelper, приведенные выше, это дает мне старое значение, но когда я проверил в БД вручную, оно имеет правильное значение.после обновления он возвращает мне другое значение, которое я обновил по порядку, и после нескольких обновлений он дает мне правильное значение из db.

Затем я добавил строку app.teardown_appcontext (close_db), но она по-прежнему не работает.

app / extenstions.py

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

app/__init__.py
from app.extensions import db

def close_db(e=None):
    db = g.pop('db', None)

    if db is not None:
        db.close()

def initdb(db):

    print("init database...")
    try:
        from app.models import Student
        db.create_all()
    except Exception as e:
        print(e)

def creat_app(config_name):
    app.config.from_object(app_config[config_name])
    db.init_app(app)
    app.app_context().push()
    app.teardown_appcontext(close_db)
    initdb(db)

controllers / student.py

@student_blueprint('/details', methods=['GET','POST'])
@handler
def stu_details()
    print("blah")

app/utils.py

def handler(f):
@wraps(f)
    def wrapper(*args, **kwargs):
        stu_id = request.args.get("stu_id")
        if not stu_id:
            logger.debug("There is no stu_id in the query string")
            _return_fun = abort(404)
        else:
            try:
                stu_helper= db_handler.StuHelper(stu_id)
                current_status = stu_helper.get_status()
                if not current_status:
                    logger.debug("URL has not been setup")
                    abort(404)
                try:
                   _return_fun = f(*args, **kwargs)
                except:
                    _return_fun = abort(500)
        return _return_fun
    return wrapper

db_hanlder.py

class StuHelper(object):
    def __new__(cls, stu_id):
        stu_obj = Student.query_filter_by(stu_id=stu_id).first()
        if not stu_obj:
            print("stu_id not exists {0}".format(stu_id))

Я должен бытьполучение stu_id из таблицы при запросе из ORM и исправление значения ststus в последующих запросах страниц.Я чувствую, что колба поддерживает стек, который дает мне случайное поведение здесь.Может кто-нибудь помочь мне решить эту проблему?

...