python %s 格式说明符对 utf-8 值失效

3 投票
2 回答
1709 浏览
提问于 2025-04-17 09:12

我有以下的Python代码,它是用来把数据推送到数据库的:

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字符串,而字典给它的是一个utf-8字符串吗?有没有什么简单的解决办法?

注意:这个json是通过json.dumps安全地创建的。里面有很多不同语言的字符。

2 个回答

0

我觉得这个问题跟Python的%s格式化代码没关系。根据Python字符串格式化的文档,它可以顺利地格式化Unicode字符。不过,要注意的是,最终得到的字符串会是Unicode格式。

你有没有查看过相关的问题,比如如何让MySQL正确处理UTF-8

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

撰写回答