当我尝试按日期选择行作为变量时,我得到无结果
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变量,因为我必须递归地使用它。 知道为什么它不起作用的任何想法?感谢
答案 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',))