Campo HTML FLASK per query Mysql

Ciao community Stackoverflow,

Sono nuovo di FLASK, tuttavia, mentre la curva di apprendimento è stata molto ripida, c’è un elemento che non sono stato in grado di capire.

Sto usando un semplice modulo di ricerca HTML, in cui gli utenti digitano il nome di una città, questo input viene passato a una query Mysql e restituisce l’output in una tabella.

Tutto funziona tranne che non riesco a far passare la variabile in Mysql … se risolvo la query funziona.

Ho provato a lavorare con FLASK WTForms, POST e GET requet, ma non so dove sto andando male. I dati variabili che sto passando non sono confidenziali, quindi non mi interessa se compare nell’URL.

Qui solo il semplice FORM (credo non sia corretto)

Qui l’output della tabella (perfettamente funzionante)

  {% for row in tabledata %}  {% endfor %} 
PO_Number Plant Name GMID Material INCOTERM Vendor Vendor Count
{{ row['PO_Number'] }} {{ row['PN'] }} {{ row['GD'] }} {{ row['MN'] }} {{ row['INCO'] }} {{ row['VNGS'] }} {{ row['CVNGS'] }}

Ecco il codice Python

 from flask import Flask, render_template, request, url_for from dbhelper_single_search import DBHelper app = Flask(__name__) DB = DBHelper() @app.route('/table') def table(): try: tabledata = DB.table_inputs() except Exception as e: print(e) tabledata = None return render_template("table.html", tabledata=tabledata) if __name__ == '__main__': app.run(port=5000, debug=True) 

Data Base Helper Mysql (il valore per PLN dovrebbe cambiare in base all’input nel modulo.

 import pymysql class DBHelper: def table_inputs(self): connection = self.connect() PLN="**City_Name**" try: query = "SELECT Plant_Geo, Plant_Code, Plant_Name, GMID, Material_Name, GROUP_CONCAT(DISTINCT Vendor_Name_GS ORDER BY Vendor_Name_GS) as VNGS, sum(2014_USD), sum(2015_USD), sum(2016_USD) FROM invoice_report WHERE plant_code like '%s' GROUP BY GMID ORDER BY sum(2015_USD) DESC" %(PLN); with connection.cursor(pymysql.cursors.DictCursor) as cursor: cursor.execute(query) return cursor.fetchall() finally: connection.close() 

Grazie in anticipo per qualsiasi aiuto.

Penso che sia necessario impostare l’azione sull’elemento

, piuttosto che su e si desidera indirizzarlo allo stesso endpoint Flask (presumo?):

 

Aggiorna la tua class di supporto un po ‘per accettare una variabile di città dalla funzione di visualizzazione (potresti rafforzarla un po’ di più):

 import pymysql class DBHelper: def table_inputs(self, city): connection = self.connect() PLN = "**%s**" % city try: query = "SELECT Plant_Geo, Plant_Code, Plant_Name, GMID, Material_Name, GROUP_CONCAT(DISTINCT Vendor_Name_GS ORDER BY Vendor_Name_GS) as VNGS, sum(2014_USD), sum(2015_USD), sum(2016_USD) FROM invoice_report WHERE plant_code like '%s' GROUP BY GMID ORDER BY sum(2015_USD) DESC"; with connection.cursor(pymysql.cursors.DictCursor) as cursor: # actually better to pass parameters like this: cursor.execute(query, (PLN,)) return cursor.fetchall() except Exception as err: # this may also help find errors generated above... print(err) finally: connection.close() 

Quindi, aggiorna la funzione di visualizzazione per verificare se la città è stata inviata e inviarla alla tua class di supporto:

 @app.route('/table') def table(): // the second argument is the default if "City_Name" is not submitted city = request.args.get('City_Name', 'New York') try: tabledata = DB.table_inputs(city) except Exception as e: print(e) tabledata = None return render_template("table.html", tabledata=tabledata)