Python格式字符串:'截断不正确的DOUBLE值'

时间:2015-06-18 15:09:45

标签: python string-formatting mysql-python

我使用sql格式化字符串sid(注意:sid的类型为str

sid = "34"  #type(sid) is string, like 34, 34s
sql = '''SELECT * FROM table_name WHERE sid={sid}'''.format(sid=sid)

print sql的结果是:

SELECT * FROM table_name WHERE sid=34

这超出了我的预期( 34 vs "34" ):

SELECT * FROM table_name WHERE sid="34"

使用此sql作为cur.execute(sql)的参数时,会遇到以下错误,从而导致错误输出。

Warning: Truncated incorrect DOUBLE value: '88s'

2 个答案:

答案 0 :(得分:5)

如果您想将值包装在引号中,可以在字符串中添加它,并确保使用"

转义\个字符
>>> 'SELECT * FROM table_name WHERE sid=\"{sid}\"'.format(sid=sid)
'SELECT * FROM table_name WHERE sid="34"'

答案 1 :(得分:0)

一个更简洁的解决方案,使用转换标记 !r

>>> sid = "34"
>>> sql = 'SELECT * FROM table_name WHERE sid={sid!r}'.format(sid=sid)
>>> sql
"SELECT * FROM table_name WHERE sid='34'"

str.format()中有两个转换标记:

  • !s在值
  • 上调用str()
  • !r在值
  • 上调用repr()