python - python sqlite3 部分搜索
问题描述
我想用python
sqlite3
. 我最初的查询是:
cur.execute("SELECT * FROM book WHERE title=? OR author=? OR year=? OR isbn=?", (title, author, year, isbn))
然后我尝试使用LIKE
关键字和字符串格式来获取 的部分搜索结果title
,如下所示:
cur.execute("SELECT * FROM book WHERE title LIKE ? OR author=? OR year=? OR isbn=?", ('%{}%'.format(title), author, year, isbn))
如https://stackoverflow.com/a/20904256/13290801
这似乎可以解决问题title
,但是现在在搜索其他参数时,尽管终端没有错误,但它根本不起作用。我错过了什么?
编辑 我尝试了@forpas 发布的答案,但它给了我相同的结果。
所以我的搜索功能的新代码是:
def search(title="", author="", year="", isbn=""):
conn = sqlite3.connect('books.db')
cur = conn.cursor()
cur.execute("SELECT * FROM book WHERE title LIKE '%' || ? || '%' OR author=? OR year=? OR isbn=?", (title, author, year, isbn))
解决方案
如果要对标题进行部分搜索,则必须在搜索标题'%'
的开头和结尾处连接通配符。
此外,您还需要一个附加条件,即为列传递空字符串和运算符AND
而不是OR
:
sql = """
SELECT * FROM book
WHERE (title LIKE '%' || ? || '%' OR LENGTH(?) = 0)
AND (author = ? OR LENGTH(?) = 0)
AND (year = ? OR LENGTH(?) = 0)
AND (isbn = ? OR LENGTH(?) = 0)
"""
cur.execute(sql, (title, title, author, author, year, year, isbn, isbn))
推荐阅读
- java - 'createVideoThumbnail(String, Int): 位图?已弃用。在 Java 中已弃用
- opengl - 是否可以将虚幻引擎 4 的 Vulkan 和 OpenGL 用作 VR 的主要渲染 API?特别是 Varjo 耳机
- slideshow - 将图像链接到幻灯片 Google 幻灯片脚本
- swift - 无法让 SceneView 出现在 ViewController 上
- windows - VLCSharp Unity3D,视频流冻结但音频仍在工作
- dynamic-programming - 模式 9 不可行 GEKKO
- plantuml - 在 PlantUML 中,使用 X 类扩展 Y 语法时如何放置标签?
- javascript - 使用 useReducer 清理 useEffect 警告,
- android - 相机应用程序在 android 模拟器中损坏(虚拟场景中的故障)
- fileoutputstream - 附加到文件流