第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何正確使用 SQL LIKE 語(yǔ)句從 Flask 應(yīng)用程序中查詢數(shù)據(jù)庫(kù)

如何正確使用 SQL LIKE 語(yǔ)句從 Flask 應(yīng)用程序中查詢數(shù)據(jù)庫(kù)

飲歌長(zhǎng)嘯 2022-12-27 10:02:26
我很難在我的 Flask 應(yīng)用程序中使用 LIKE 語(yǔ)句來(lái)查詢我的數(shù)據(jù)庫(kù)。我不斷收到語(yǔ)法錯(cuò)誤。我的應(yīng)用程序用于搜索書(shū)籍,我需要能夠搜索所有列。我知道我需要使用 LIKE 但似乎我的變量中的單引號(hào)妨礙了。但是,我不是 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()我收到此錯(cuò)誤: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)從這個(gè)錯(cuò)誤中,我可以看到單引號(hào)被添加到我的變量值(搜索),但我沒(méi)有成功去除或替換它們。所以我嘗試了這種格式:search = request.values.get('search')books = db.execute("SELECT * FROM books WHERE author LIKE %s", ('%' + search + '%',)).fetchall()但這也給了我一個(gè)錯(cuò)誤: AttributeError: 'list' object has no attribute 'keys'我已經(jīng)為此工作了大約四天,但我嘗試過(guò)的任何方法都沒(méi)有奏效。我很茫然。我知道我需要去掉那些單引號(hào),但我不確定怎么做。我有一種感覺(jué),它非常容易,這會(huì)讓我很傷心,但作為新手,我正在盡我最大的努力。如果您需要任何其他信息,請(qǐng)告訴我。
查看完整描述

2 回答

?
萬(wàn)千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊

對(duì)于參數(shù)化查詢,您永遠(yuǎn)不需要在語(yǔ)句中使用引號(hào),它們將由 db api 添加。這應(yīng)該有效:


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

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

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


錯(cuò)誤消息顯示如果查詢已經(jīng)包含引號(hào)會(huì)發(fā)生什么:將添加另一組引號(hào),從而中斷查詢。


但請(qǐng)注意,這也可能會(huì)出現(xiàn)此處所述的問(wèn)題:表達(dá)式中的反斜杠LIKE被視為轉(zhuǎn)義字符,可用于將傳遞的字符串中的通配符視為其文字值,但如果使用不當(dāng),可能會(huì)導(dǎo)致意外的搜索結(jié)果,或者可能導(dǎo)致錯(cuò)誤(例如,如果 like 模式以反斜杠結(jié)尾)。

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


position(:search in author) > 0


查看完整回答
反對(duì) 回復(fù) 2022-12-27
?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊

format在這個(gè)話題上對(duì)我有幫助。

例子:

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

cursor.execute(query)

你可以參考這個(gè)帖子


查看完整回答
反對(duì) 回復(fù) 2022-12-27
  • 2 回答
  • 0 關(guān)注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)