cursor.execute()与参数化查询(python、sqlite)一起使用时返回空列表

cursor.execute()与参数化查询(python、sqlite)一起使用时返回空列表,python,sqlite,Python,Sqlite,当我使用此代码时: def recherche(大小写,值='*'): cursor=sqliteConnection.cursor() 如果值=='*': cursor.execute(“按ID从物品订单中选择*”) 其他: value=“%”+str(值)+“%” p=(大小写,值) cursor.execute(“从文章中选择*,其中?LIKE?ORDER BY ID;”,p) 结果=cursor.fetchall() cursor.close() 返回结果 结果以空列表的形式返回 另一

当我使用此代码时:

def recherche(大小写,值='*'):
cursor=sqliteConnection.cursor()
如果值=='*':
cursor.execute(“按ID从物品订单中选择*”)
其他:
value=“%”+str(值)+“%”
p=(大小写,值)
cursor.execute(“从文章中选择*,其中?LIKE?ORDER BY ID;”,p)
结果=cursor.fetchall()
cursor.close()
返回结果
结果以空列表的形式返回
另一方面,如果我使用这个:

def recherche(大小写,值='*'):
cursor=sqliteConnection.cursor()
如果值=='*':
cursor.execute(“按ID从物品订单中选择*”)
其他:
value=str(值)
p=(大小写,值)
execute(“从项目中选择*,其中“+case+”类似“%”“+value+“%”ORDER BY ID;”)
结果=cursor.fetchall()
cursor.close()
返回结果
正确返回值。

据我所知,使用第一种方法更为优化,但它根本不适合我。

类似的
应该是:

LIKE '?'

case
应该包含列名吗?这些必须直接出现在查询中;您不能将参数用于标识符。是的
case
是一个列名,有其他方法吗?@stovfl这不重要,因为整个内容都作为一个字符串发送,此外,引号会阻止
,因此它会返回错误:
绑定数量不正确
请使用第二种方法。@tarikamari:
仅用于数据替换。如果需要变量字段名,必须使用Python
str
substitution-like
.format(…
+字段名+
)。