簡體   English   中英

如何在 mysql 連接器 python 查詢中獲得文字“%”?

[英]How do I get a literal '%' in a mysql connector python query?

考慮這個代碼:

def search(searchstr: str, limit: int=10, offset: int=0):
    csr = app.sql.cursor(dictionary=True)
    csr.execute("select username, fname, bio from followers where username like %%%s%% limit %d offset %d", (searchstr, limit, offset))
    return csr.fetchall()

search("j")

其中app.sql是對連接對象的引用。

我希望它執行類似於以下內容的操作: select username, fname, bio from followers where username like %j% limit 10 offset 0但它總是給我錯誤:

  File "/---/user.py", line 67, in search
    csr.execute("select username, fname, avatarUrl, bio from followers where username like %%%s%% limit %d offset %d", (searchstr, limit, offset))
  File "/---/venv/lib/python3.8/site-packages/mysql/connector/cursor.py", line 542, in execute
    raise errors.ProgrammingError(
mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

我無法弄清楚我做錯了什么,因為

>>> "%%%s%% %d %d" % ("j", 10, 0)
"%j% 10 0"

這是預期的輸出。 我怎樣才能解決這個問題?

占位符不像復制和粘貼那樣工作,你不能把它們放在任何地方並期望它們被理解。 即使它確實像那樣工作,在你的情況下你最終會like %foo% ,這是無效的 SQL 語法。

您需要將一個字符串占位符放入查詢中,並提供一個字符串作為包含LIKE通配符的參數:

csr.execute('... LIKE %s ...', (f'%{searchstr}%', ...))

換句話說,您從 Python 中提供%通配符,而不是從 SQL 語句中提供。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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