Ich erstellte eine API mit Flask und MySQLdb, um Daten abzufragen, aber ich empfahl, sqlalchemy wegen Verbindungspooling zu verwenden. Dies wird für meine Website besser, wenn hohe Verkehrs aufgetreten, wie ich hart öffnen und schließen DatenbankverbindungFlask: fehlendes Präfix bei Auswahl mit sqlalchemy
jedoch nicht tun müssen, wenn ich die Arbeits Code umwandeln sqlalchemy, ist es nicht immer das Präfix
from flask import Flask,jsonify,abort,make_response,request,render_template
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy import create_engine
@app.route('/KLSE/search', methods=['GET'])
def KLSEsearch():
engine = create_engine('mysql+mysqldb://xxx:[email protected]/zzz$default')
conn = engine.raw_connection()
cur = conn.cursor()
name = request.args.get('name',default='',type=str)
volumeMin = request.args.get('volumeMin',default=0,type=float)
volumeMax = request.args.get('volumeMax',default=0,type=float)
query = """ SELECT * FROM KLSE WHERE (Stock LIKE %s or Name LIKE %s or Stockcode LIKE %s)
AND (Volume_changes_pc BETWEEN (IF (%s='_',-5000,%s)) AND (IF(%s='_',5000,%s))) """
input = (name+"%",name+"%",name+"%",volumeMin,volumeMin,volumeMax,volumeMax)
try:
cur.execute(query,(input))
h = cur.fetchall()
except Exception:
return 'Error: unable to fetch items'
return jsonify({'Stock': h})
Ergebnis:
{
"Stock": [
[
11,
"PRESTAR",
"PRESTAR RESOURCES BERHAD [S]",
23.8,
],
Was ich von vorherigen Code mit MySQLdb erhalten:
from flask import Flask,jsonify,abort,make_response,request,render_template
import MySQLdb
import MySQLdb.cursors
@app.route('/KLSE/search', methods=['GET'])
def KLSEsearch():
db = MySQLdb.connect(host='xxx.mysql.pythonanywhere-services.com',user='zzz',passwd='xxx',db='zzz$default',cursorclass=MySQLdb.cursors.DictCursor)
curs = db.cursor()
name = request.args.get('name',default='',type=str)
volumeMin = request.args.get('volumeMin',default=0,type=float)
volumeMax = request.args.get('volumeMax',default=0,type=float)
query = """ SELECT * FROM KLSE WHERE (Stock LIKE %s or Name LIKE %s or Stockcode LIKE %s)
AND (Volume_changes_pc BETWEEN (IF (%s='_',-5000,%s)) AND (IF(%s='_',5000,%s))) """
input = (name+"%",name+"%",name+"%",volumeMin,volumeMin,volumeMax,volumeMax)
try:
curs.execute(query,(input))
h = curs.fetchall()
except Exception:
return 'Error: unable to fetch items'
finally:
curs.close()
db.close()
return jsonify({'Stock': h})
Ergebnis, das und zeigt Präfix erfordern:
{
"Stock": [
{
"Stock": "PRESTAR",
"Stockcode": "11",
"Change_pc": 2.604,
"Name": "PRESTAR RESOURCES BERHAD [S]",
},
Im Code mit sqlalchemy, ich verwende Cursor nicht in der Nähe und db schließen, als sqlalchemy Motor das Connection-Pooling wird handhaben, ist das richtig?
Ich benutze sqlalchemy Kern, weil es Verbindungspooling behandeln kann. jedoch ist mein Code gut für hohen Traffic oder noch sqlalchemy ORM ist bevorzugt? – vindex
So stellen Sie zwei verschiedene Fragen, die erste ist nach, wie Sie Ihre Abfrageergebnisse als ein Wörterbuch anstelle einer Liste zurückgeben. Die zweite betrifft die Leistung des Sammlungspools in SQLAlchemy Core vs ORM. Ist das korrekt? – ACV