簡體   English   中英

在查詢PyMySQL中使用WHERE

[英]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 ['=', '!=']不是Trueif 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM