我想創建一個API,允許用戶在用戶輸入的MySQL表中搜索。Python燒瓶:搜索MySQL開始與字母表
例如,用戶輸入是'PA',它將在表格中搜索以'PA'開頭的股票。
在此之前,我測試了一個以'P'開始的搜索,它可以工作。但是,如果我改變sg='P'
和curs.execute("SELECT * FROM KLSE WHERE Stock LIKE '%s'"%sg+'%')
無法獲得的P股票開始和return 'Error: unable to fetch items'
from flask import Flask,jsonify,abort,make_response,request,render_template
import MySQLdb
import MySQLdb.cursors
def KLSEstock(Stock):
db = MySQLdb.connect(host='xxx.mysql.pythonanywhere-services.com',user='vin',passwd='xxx',db='vinudb$default',cursorclass=MySQLdb.cursors.DictCursor)
curs = db.cursor()
sg ='P%'
try:
curs.execute("SELECT * FROM KLSE WHERE Stock LIKE '%s'"%sg)
c = curs.fetchall()
except Exception:
return 'Error: unable to fetch items'
#return "hihi"
return jsonify({'Stock': c})
問題是curs.execute("SELECT * FROM KLSE WHERE Stock LIKE '%s'"%sg)
和sg ='P%'
與curs.execute("SELECT * FROM KLSE WHERE Stock LIKE '%s'"%sg+'%')
比較和sg ='P'
是一樣的,但爲什麼前者能夠從數據庫,但查詢後來不是?
@我只使用GET,是否安全? – vindex
沒有。仍然必須逃避'sg'。否則有人可以輸入''; drop table klse; - ''讓它放下你的桌子。 – 2ps
'curs.execute(「select * from klse where stock like'%s'%''%sg)''當我cahnge到'curs.execute(」select * from klse where stock like'%s %%'', sg)',它不起作用。任何想法? – vindex