python%s格式说明符失败的utf-8值

时间:2011-12-29 13:15:37

标签: python mysql utf-8

我有以下python代码将数据推送到db:

cursor.execute("INSERT INTO "+ DATA_TABLE + """ (fk_id, title, streetaddress,json) 
                 values (%(fk_id)s, %(title)s, %(address)s, %(json)s ) """ ,(
                 result))

但我收到错误:

  File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 185, in unicode_literal
    return db.literal(u.encode(unicode_literal.charset))
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)

是因为%s期望值是一个有效的latin-1字符串,而dict给它一个utf-8字符串?什么是干净的解决方法?

注意:使用json.dumps安全地创建json。它有几个不同语言的字符。

2 个答案:

答案 0 :(得分:4)

你应该尝试在unicode中转换所有字符串

cursor.execute(u"INSERT INTO "+ unicode(DATA_TABLE) + u""" (fk_id, title, streetaddress,json) 
                 values (%(fk_id)s, %(title)s, %(address)s, %(json)s ) """ ,(
                 result))

并传递charset =“utf-8”以按http://mysql-python.sourceforge.net/MySQLdb.html

中的指定进行连接

答案 1 :(得分:0)

我不认为这是python%s格式代码的问题。根据{{​​3}},它可以格式化unicode而不会出现问题。但请注意,生成的字符串将是unicode。

您是否查看了所有相关问题,例如: python string formatting documentation