我正在尝试使用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。
答案 0 :(得分:3)
考虑将%
通配符连接到绑定值var1
:
c.execute("SELECT authors, year, title, abstract" +
" FROM usertable WHERE authors LIKE (?)", ('%'+var1+'%',))
您需要这样做的原因是?
占位符在参数化查询和LIKE
表达式中替换字符串文字,值一起使用的通配符是字符串文字,用括号中的单引号表示: / p>
SELECT authors, year, title, abstract FROM usertable WHERE authors LIKE '%Smith%'
您的初始尝试失败,因为您使用单引号包装?
并且游标无法正确地将该参数绑定到预准备语句,因此该符号将字面上作为问号。