У меня ниже настройки БД в моем коде.В моем коде немного 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 в последующих запросах страниц.Я чувствую, что колба поддерживает стек, который дает мне случайное поведение здесь.Может кто-нибудь помочь мне решить эту проблему?