![](/img/trans.png)
[英]using correct syntax in pymysql for passing python variable to query
[英]Using WHERE in query PyMySQL
我試圖創建一個程序,用戶可以在其中輸入運算符,即<>或=,然后在pymysql中輸入數據庫的編號。 我嘗試了多種不同的方法來完成此操作,但不幸的是未成功。 我有兩個顯示為一個的文檔,並將顯示導入到另一個文檔中。
文檔1
def get_pop(op, pop):
if (not conn):
connect();
query = "SELECT * FROM city WHERE Population %s %s"
with conn:
cursor = conn.cursor()
cursor.execute(query, (op, pop))
x = cursor.fetchall()
return x
文件二
def city():
op = input("Enter < > or =: ")
population = input("Enter population: ")
pop = display.get_pop(op, population)
for p in pop:
print(pop)
我收到以下錯誤。
pymysql.err.ProgrammingError:(1064,......
請幫忙謝謝
你做不到 參數化僅適用於值,不適用於運算符或表名或列名。 您需要將運算符格式化為字符串。 不要混淆%s
占位符,在這里與Python字符串格式; MySQL很尷尬,因為它使用%s來綁定參數,這與常規的Python字符串格式沖突。
查詢字符串中的MySQL %s
轉義用戶輸入以防止SQL注入。 在這種情況下,我設置了一個基本測試,以查看用戶提交的操作部分是否在可接受的操作列表中。
def get_pop(op, pop):
query = "SELECT * FROM city WHERE Population {} %s" # Add a placeholder for format
with conn: # Where does this come from?
cursor = conn.cursor()
if op in ['=', '!=']:
cursor.execute(query.format(op), (pop,))
x = cursor.fetchall()
return x
if op in ['=', '!=']
不是True
, if op in ['=', '!=']
您將想出一些合理的return
值,但這完全取決於您希望它如何表現。
在檢查op
確實包含“ <>”或“ =“,並且該pop
確實包含數字之后,您可以嘗試:
query = "SELECT * FROM city WHERE Population " + op + " %s";
當心SQL注入。
然后
cursor.execute(query, (pop))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.