Ich benutze Python Flask und MySQL. Ich bekomme Input von der App für Name, Preis und Volumen, um von MySQL zu allen Daten zu suchen.Python: MySQL wählen null mit nicht null Daten
Die Ausgabe ist wie folgt:
name | Price | Volume
Screw | 5.0 | 700
iron | null | 67
wood | 23 | null
metal | 76 | 56
plywood| 100 | null
rebar | 75 | 59
steel | null | 87
L steel| 78 | 65
Was ich erforderlich ist, wenn ich mit einem bestimmten Bereich für die Lautstärke wählen, würde Ich mag für Volumen null ausgeschlossen, sondern enthalten null für Preis und und umgekehrt.
Szenario 1:
Select Volumen zwischen 60 bis 100, wählen Preis Form und einen beliebigen Namen.
Stromausgang ist:
name | Price | Volume
iron | null | 67
wood | 23 | null
plywood| 100 | null
steel | null | 87
L steel| 78 | 65
Ausgabe, die ich brauche:
name | Price | Volume
iron | null | 67
steel | null | 87
L steel| 78 | 65
Szenario 2:
Select Preis zwischen 50 bis 120, wählen Sie alle Form Volume und einen beliebigen Namen .
Stromausgang:
name | Price | Volume
iron | null | 67
metal | 76 | 56
plywood| 100 | null
rebar | 75 | 59
steel | null | 87
L steel| 78 | 65
Ausgabe, die ich brauche:
name | Price | Volume
metal | 76 | 56
plywood| 100 | null
rebar | 75 | 59
L steel| 78 | 65
Unten ist mein Code:
@app.route('/ABC/search1', methods=['GET'])
def ABCsearch1():
name = request.args.get('name',default='',type=str)
priceMin = request.args.get('priceMin',default='',type=str)
priceMax = request.args.get('priceMax',default='',type=str)
volMin = request.args.get('volMin',default='',type=str)
volMax = request.args.get('volMax',default='',type=str)
limit = request.args.get('limit',default=0,type=int)
offSet = request.args.get('offSet',default=0,type=int)
query = """ SELECT * FROM KLSE WHERE (Stock LIKE :s0 or Name LIKE :s1 or Number LIKE :s2)
AND (Price BETWEEN (IF(:s3='_',-5000,:s4)) AND (IF(:s5='_',5000,:s6)) OR Price IS NULL)
AND (Volume BETWEEN (IF(:s7='_',-5000,:s8)) AND (IF(:s9='_',5000,:s10)) OR Volume IS NULL)
LIMIT :s95 OFFSET :s96 """
query = text(query)
input = {'s0':name+"%",'s1':name+"%",'s2':name+"%",'s3':priceMin,'s4':priceMin,'s5':priceMax,'s6':priceMax,'s7':volMin,'s8':volMin,'s9':volMax,'s10':volMax,
's95':limit,'s96':offSet}
try:
call = db.session.execute(query,input)
f = call.fetchall()
col = ['index','Name','Number','Price','id']
f1 = [OrderedDict(zip(col,t)) for t in f]
except Exception:
return 'Error'
return jsonify({'Stock': f1})
Es ist was ich will! Allerdings dachte ich, ich benutze sqlalchemy, was sollten Sie vorschlagen, dass ich tun werde? – bkcollection
@bkcollection Entschuldigung für die späte Antwort. Sqlalchemy macht es überflüssig, komplette Abfragezeichenfolgen in SQL-Syntax zu schreiben, stattdessen verwenden Sie einfach einen Abfragebefehl wie: 'items = session.query ('Element') filter_by (blah blah blah) .first() ' – zeo
Es ist nicht nur bequemer, sondern auch viel stabiler (sicher vor Fehlern). Im Moment tun Sie fast dasselbe wie die Verwendung der Python-DB-API, bei der die vollständige SQL-Syntax für jede Datenbankoperation geschrieben wird. – zeo