Flask Python应用中SQL LIKE语句绑定变量的问题求助
解决Flask中SQL LIKE参数化查询返回空的问题
你的问题出在错误地给参数占位符加了单引号,同时没必要混合f-string和参数化查询,导致数据库把:text当成了字面字符串而非参数占位符,自然查不到数据。
直接用以下两种正确写法之一即可:
方法1:将通配符拼在参数值中(推荐,跨数据库通用)
rows = cursor.execute("SELECT * FROM vragen WHERE vraag LIKE :text", {"text": '%' + query + '%'}).fetchall()
注意这里的SQL语句里,:text不需要加任何引号,参数化查询会自动处理字符串的转义和引号包裹。
方法2:在SQL语句中拼接通配符(需适配数据库语法)
- 适用于SQLite/PostgreSQL:
rows = cursor.execute("SELECT * FROM vragen WHERE vraag LIKE '%' || :text || '%'", {"text": query}).fetchall()
- 适用于MySQL:
rows = cursor.execute("SELECT * FROM vragen WHERE vraag LIKE CONCAT('%', :text, '%')", {"text": query}).fetchall()
为什么原来的代码无效?
你之前的代码里,f"SELECT * FROM vragen WHERE vraag LIKE ':text'"会把:text作为字符串字面量传给数据库,相当于执行了SELECT * FROM vragen WHERE vraag LIKE ':text',自然找不到匹配的数据。
内容的提问来源于stack exchange,提问作者Developermees
相关产品推荐
相关产品推荐

