Python插入值<;=MySQL数据库中的1e-7

Python插入值<;=MySQL数据库中的1e-7,python,mysql,Python,Mysql,我有一个python(2.7)函数,它对一个双值执行MySQL更新查询,当数字大于1e-7时,一切正常,问题是如果数字等于或小于0,它会更新字段 为了实际查看发生了什么,我在代码中添加了一些打印语句,以输出qry(执行的查询)和值(要插入的值) 如果我使用值1e-6,我的输出如下: 更新temp\u ctrl\u 1设置值\u dbl=0.000001,其中name='pid\u ki'&board\u id=9 9.99999974738e-06 正如你所看到的,在这种情况下,一切都是好的。但

我有一个python(2.7)函数,它对一个双值执行MySQL更新查询,当数字大于1e-7时,一切正常,问题是如果数字等于或小于0,它会更新字段

为了实际查看发生了什么,我在代码中添加了一些打印语句,以输出
qry
(执行的查询)和
值(要插入的值)

如果我使用值1e-6,我的输出如下:

更新temp\u ctrl\u 1设置值\u dbl=0.000001,其中name='pid\u ki'&board\u id=9 9.99999974738e-06

正如你所看到的,在这种情况下,一切都是好的。但是,如果现在使用值1e-7

更新temp\u ctrl\u 1设置值\u dbl=0.000000,其中name='pid\u kp'&&board\u id=9 9.9999997475E-07


当构造查询字符串时,变量
四舍五入为零,如何使用小于或等于1e-7的值更新MySQL双字段???

不要自己格式化字符串

  • 这会使您面临注射攻击
  • 浮点数被格式化为字符串,导致您丢弃数据
而是将字符串和对象列表作为两个单独的参数传递:

cursor.execute('UPDATE %s SET value_dbl = %f WHERE name = %s && board_id = %d',
               [self._getValueTableName(idx), value, valueName, self.boardInfo[boardName]])

DOUBLE
s可以使用科学记数法插入,因此您只需将
%f
更改为
%s
,即可获得值的Python字符串表示形式,而不是尝试将其四舍五入为浮点:

>>> value = 1e-7
>>> print value
1e-07
>>> print '%f' % (value)
0.000000
>>> print '%s' % (value)
1e-07

但是,我同意另一个答案中表达的观点,如果您能帮助的话,您真的不应该将查询字符串与字符串格式混搭起来。

我理解您在这里所说的,但是在我的特定应用程序中,所有内容都在本地运行,我不必担心注入攻击。很高兴听到这一点。这仍然是一个很好的实践,但对你的问题来说重要的是,它也有保持任意精度的效果,因为它从不转换为字符串。
>>> value = 1e-7
>>> print value
1e-07
>>> print '%f' % (value)
0.000000
>>> print '%s' % (value)
1e-07