亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確使用 SQL LIKE 語句從 Flask 應用程序中查詢數據庫

如何正確使用 SQL LIKE 語句從 Flask 應用程序中查詢數據庫

飲歌長嘯 2022-12-27 10:02:26
我很難在我的 Flask 應用程序中使用 LIKE 語句來查詢我的數據庫。我不斷收到語法錯誤。我的應用程序用于搜索書籍,我需要能夠搜索所有列。我知道我需要使用 LIKE 但似乎我的變量中的單引號妨礙了。但是,我不是 100% 肯定的。我知道如果我想從基于 id 的表中選擇全部,格式將是這樣的:id = request.form.get('id')name = db.execute("SELECT first_name FROM users WHERE id=:id", {"id": current_id})如果我用 LIKE 嘗試這種類似的格式,例如:search = request.values.get('search')books = db.execute("SELECT * FROM books WHERE author LIKE '%:search%'", {"search": search}).fetchall()我收到此錯誤:sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "Raymond"LINE 1: SELECT * FROM books WHERE author LIKE '%'Raymond'%'^[SQL: SELECT * FROM books WHERE author LIKE '%%%(search)s%%'][parameters: {'search': 'Raymond'}](Background on this error at: http://sqlalche.me/e/f405)從這個錯誤中,我可以看到單引號被添加到我的變量值(搜索),但我沒有成功去除或替換它們。所以我嘗試了這種格式:search = request.values.get('search')books = db.execute("SELECT * FROM books WHERE author LIKE %s", ('%' + search + '%',)).fetchall()但這也給了我一個錯誤: AttributeError: 'list' object has no attribute 'keys'我已經為此工作了大約四天,但我嘗試過的任何方法都沒有奏效。我很茫然。我知道我需要去掉那些單引號,但我不確定怎么做。我有一種感覺,它非常容易,這會讓我很傷心,但作為新手,我正在盡我最大的努力。如果您需要任何其他信息,請告訴我。
查看完整描述

2 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

對于參數化查詢,您永遠不需要在語句中使用引號,它們將由 db api 添加。這應該有效:


search = request.values.get('search')

books = db.execute("SELECT * FROM books WHERE author LIKE :search", {"search": '%' + search + '%'}).fetchall()

%符號必須是參數的一部分,以便最終:search可以用帶引號的搜索字符串替換,如此處所述。


錯誤消息顯示如果查詢已經包含引號會發生什么:將添加另一組引號,從而中斷查詢。


但請注意,這也可能會出現此處所述的問題:表達式中的反斜杠LIKE被視為轉義字符,可用于將傳遞的字符串中的通配符視為其文字值,但如果使用不當,可能會導致意外的搜索結果,或者可能導致錯誤(例如,如果 like 模式以反斜杠結尾)。

如果您不打算允許用戶在搜索字符串中插入通配符,則需要對它們進行轉義,或者考慮改用position()函數:


position(:search in author) > 0


查看完整回答
反對 回復 2022-12-27
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

format在這個話題上對我有幫助。

例子:

query = "SELECT title FROM movies WHERE title LIKE '%{s}%'".format(s=Keyword) 

cursor.execute(query)

你可以參考這個帖子


查看完整回答
反對 回復 2022-12-27
  • 2 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號