我正在尝试将方法参数传递给sqlite命令,但我遇到了问题。
我尝试了几种不同的方法,包括:
c.execute('''SELECT ?, count(*)
FROM posts
GROUP BY 1''', (var,))
c.execute('''SELECT :variable, count(*)
FROM posts
GROUP BY 1''', {"variable" : var})
我已经查看了python docs,并相信我正在关注他们。
这两种方法都不会选择列,而是返回
[('lang', 3284469)]
其中lang是列的名称和传递的变量的值。它看起来应该更像
[('en', 3289)]
[('es', 845)]
....
[('ze', 39)]
我能够工作的唯一方法是:
c.execute('''SELECT '''+var+''', count(*)
FROM posts
GROUP BY 1''')
我对此并不特别满意,有没有更好的方法呢?我究竟做错了什么?感谢
答案 0 :(得分:0)
这不是参数化请求的工作方式。您应该只使用值的参数,而不是标识符。这意味着请求参数不应该是列名,也不应该是表名,并且只出现在where或having子句中。
因此,如果您希望列名或表名是可变的,则必须动态构建请求字符串,并且当您希望where子句中的值是动态的时,您可以使用参数:
c.execute('''SELECT '''+var+''', count(*) as total
FROM posts
GROUP BY 1
HAVING total > ?''', (minval,))