如何在SQLite定义中使用变量

时间:2017-10-31 21:40:26

标签: python sqlite

当我尝试按日期选择行作为变量时,我得到无结果

c.execute('SELECT * FROM ES_F WHERE date = {};'.format('2017-10-23'))
----> None

当我在SQL定义中放入相同的日期时,它工作正常,我得到了我想要的行。

c.execute("""SELECT * FROM ES_F WHERE date = '2017-10-23';""")
----> ('2017-10-23', '09:27', 567, 'Mon', 2576.5, 2574.0, 2572.75, 2577.25, 2572.0, 2577.25, 2061.0, 159300, 3096574, 'ESZ7')

我想使用as变量,因为我必须递归地使用它。 知道为什么它不起作用的任何想法?感谢

1 个答案:

答案 0 :(得分:2)

可以使用repr方法将值转换为.format

'SELECT * FROM ES_F WHERE date = {!r};'.format('2017-10-23')

或者将单引号作为字符串的一部分:

'SELECT * FROM ES_F WHERE date = {};'.format("'2017-10-23'")

确实,最佳做法是不使用字符串插值,因为这会使您容易受到SQL注入攻击。

作为docs state

  

相反,请使用DB-API的参数替换。把?作为一个   占位符,无论您想要使用哪个值,然后提供元组   值作为游标execute()方法的第二个参数。

所以使用:

c.execute('SELECT * FROM ES_F WHERE date = ?;', ('2017-10-23',))