【问题标题】:Search SQLite3 database using a Python variable使用 Python 变量搜索 SQLite3 数据库
【发布时间】:2016-11-28 23:29:57
【问题描述】:

我正在尝试使用 pythonic 变量作为搜索词来搜索我的 SQLite3 数据库。我正在搜索的术语是数据库中单元格内容的一部分(例如,单元格中的 Smith:[Harrison GB, Smith JH])并且通常位于字符串的中间在一个单元格中。

我尝试将其编码如下:

def read_from_db():
    c.execute("SELECT authors, year, title, abstract FROM usertable WHERE authors LIKE (?)",(var1,))
    data = c.fetchall()
    print(data)
    for row in data:
        searchlist.append(row)

var1="Smith"
read_from_db()

这应该会逐行显示结果。但是,当 var1 = "Smith" 时,我得到 0 个结果。当我将其值更改为“Harrison GB, Smith JH”时,我得到了所有结果。

当我尝试通过更改 SQLite3 执行查询来解决它时,我会产生错误。

ERROR
    c.execute("SELECT authors, year, title, abstract FROM usertable WHERE authors LIKE '%?%'",(var1,))
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.

如果我将结尾更改为:$?$、(%?%) 等,我会遇到语法错误。我尝试过:

...authors="%?%"

但这也不起作用。 SO上有一些类似的问题,但它们并不能完全解决我的问题......

我在 Windows 10 上运行 Python 3.4 和 SQLite3。

【问题讨论】:

    标签: python sql select sqlite


    【解决方案1】:

    考虑将% 通配符连接到绑定值var1

    c.execute("SELECT authors, year, title, abstract" +
              " FROM usertable WHERE authors LIKE (?)", ('%'+var1+'%',))
    

    您需要这样做的原因是 ? 占位符在参数化查询中替换了字符串文字,对于 LIKE 表达式,带有值的通配符是字符串文字,由其封闭的单引号表示:

    SELECT authors, year, title, abstract FROM usertable WHERE authors LIKE '%Smith%'
    

    您的初始尝试失败了,因为您将 ? 用单引号括起来,并且光标无法将参数正确绑定到准备好的语句,因此该符号被视为问号。

    【讨论】:

    • 哈!有用!这是我忽略但没有尝试的一个选项!为快速回复干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2016-05-18
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多