Я объявил глобальный объект соединения и пытаюсь использовать его на нескольких конечных точках. Однако после нескольких запросов я получаю ошибку pymysql.err.InternalError: Packet sequence number wrong
. Из того, что я прочитал, похоже, что это связано с безопасностью потоков и тем фактом, что объект SQLAlchemy
connection
не является потокобезопасным. Должен ли я открывать отдельное соединение каждый раз, когда я выполняю запрос? Или есть какой-то другой шаблон, который я могу использовать? Мне нужно использовать SQLAlchemy Core.
from flask import Flask, jsonify, request
from webargs import fields
from webargs.flaskparser import use_args, use_kwargs, parser, abort
from sqlalchemy import create_engine, MetaData, Table, select, func, and_
from flask_cors import CORS, cross_origin
engine = create_engine('...')
connection = engine.connect()
metadata = MetaData()
metadata.reflect(bind=engine)
vesseldetail = metadata.tables['VESSELDETAIL']
keydate = metadata.tables['KEYDATE']
app = Flask(__name__)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
@app.route('/api/list-vessels', methods=['GET'])
def list_vessels():
vessel_list = []
s = select([vesseldetail.c.Vessel])
rp = connection.execute(s)
for row in rp:
vessel_list.extend(list(row))
return jsonify(vessel_list)
@app.route('/api/list-keydates/', methods=['GET'])
def list_keydates():
vesselname = request.args["vesselname"]
intervention_list = []
keydate_list = []
s = select([keydate.c.Intervention, keydate.c.Date])
s = s.where(keydate.c.VESSEL==vesselname)
rp = connection.execute(s)
for row in rp:
intervention_list.append(row[0])
keydate_list.append(row[1])
return jsonify({"keydates": keydate_list,
"intervention": intervention_list})