将值传递给Sqlite3 python

时间:2017-03-22 14:55:32

标签: python python-3.x sqlite

我正在尝试将方法参数传递给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''')

我对此并不特别满意,有没有更好的方法呢?我究竟做错了什么?感谢

1 个答案:

答案 0 :(得分:0)

这不是参数化请求的工作方式。您应该只使用的参数,而不是标识符。这意味着请求参数不应该是列名,也不应该是表名,并且只出现在where或having子句中。

因此,如果您希望列名或表名是可变的,则必须动态构建请求字符串,并且当您希望where子句中的值是动态的时,您可以使用参数:

c.execute('''SELECT '''+var+''', count(*) as total
             FROM posts
             GROUP BY 1
             HAVING total > ?''', (minval,))