Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLite3赢得了';不执行变量的通配符_Python_Database_Sqlite - Fatal编程技术网

Python SQLite3赢得了';不执行变量的通配符

Python SQLite3赢得了';不执行变量的通配符,python,database,sqlite,Python,Database,Sqlite,我已经用sqlite3创建了一个数据库,但是我不能使用通配符访问和检索数据 要使用以下值检索h1列:Case Samsung Galaxy S9,通配符“%?%”无效 我得到一个错误: Traceback (most recent call last): File "regex_query.py", line 13, in <module> for row in c.execute("SELECT * FROM products WHERE h1 LIKE '%?%' O

我已经用sqlite3创建了一个数据库,但是我不能使用通配符访问和检索数据

要使用以下值检索h1列:Case Samsung Galaxy S9,通配符“%?%”无效

我得到一个错误:

Traceback (most recent call last):
  File "regex_query.py", line 13, in <module>
    for row in c.execute("SELECT * FROM products WHERE h1 LIKE '%?%' ORDER BY price", (t,)):
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 1 supplied.

我已经寻找了几个小时的解决方案,但我找不到问题所在。谢谢。

除非您使用的是需要
值的sql,否则我认为该方法不起作用。不过这应该行得通

for row in c.execute("SELECT * FROM products WHERE h1 LIKE '%{}%' ORDER BY price".format(t))

非常感谢。我试图从一个数据库中查询,该数据库的h1列的值为“三星Galaxy S7”、“机箱三星Galaxy S6”、“屏幕保护三星Galaxy S8”。我尝试了您的解决方案,但得到了错误
sqlite3。操作错误:没有这样的专栏:Samsung
。因此,如果有人需要基于kw进行搜索,它应该返回所有在h1列中包含kw的行。好的,我做了一个编辑,尝试添加
%
,就像我做的那样。非常感谢。它起作用了!但是为什么呢?我的意思是你介意解释一下它背后的逻辑吗,因为我现在似乎无法理解。
&?&
与工作解决方案
&{}&
之间有什么区别?非常感谢。当然。据我所知,
“%?%”
方法可用于
插入到
sql语句中。此方法中可能内置了额外的sql注入保护,但不确定。但是db不知道如何处理额外的参数,
t
在本例中,您给了它,所以它抛出了一个错误。
.format
方法是python中内置的字符串工具。它会自动格式化您提供的任何内容,并将其插入字符串中的
{}
。这是在sql被发送到db之前发生的,因此对于execute方法来说它看起来就像一个字符串。如果这有帮助,请随意接受答案以结束问题。谢谢您的解释。你救了我一天:)
for row in c.execute("SELECT * FROM products WHERE h1 LIKE '%{}%' ORDER BY price".format(t))