python%s格式说明符无法用于utf-8值
我有以下将数据推送到db的python代码:python%s格式说明符无法用于utf-8值,python,mysql,utf-8,Python,Mysql,Utf 8,我有以下将数据推送到db的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/
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希望值是有效的拉丁语-1字符串,而dict给它一个utf-8字符串吗?什么是干净的解决办法
注意:json是使用
json.dumps
安全创建的。它有几个不同语言的字符。您应该尝试将所有字符串转换为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”进行连接,我认为这不是python%s格式代码的问题。根据,它可以格式化unicode而无需麻烦。但是,请注意,生成的字符串将是unicode
您是否查看了所有相关问题,例如?谢谢@xaview-combelle的回答,但这不起作用。我仍然收到
UnicodeEncodeError:“latin-1”编解码器无法在同一行上对位置0-5的字符进行编码:序号不在范围(256)
。-1:不要像这样构建SQL语句。Google搜索“Little Bobby Tables”,看看会发生什么。@S.Lott:假设DATA\u TABLE
变量不是来自用户输入,则此代码不易受SQL注入的攻击。@LukeWoodward:虽然您的假设通常是正确的,但不正确的时间是致命的。而且,像这样构建SQL效率很低。在API中使用正确的值绑定意味着RDBMS后端使用一个标准化的查询来绑定值。这节省了解析时间,并且(有时)可以显著提高性能。@S.Lott Yes\u表不是来自用户。它是一个系统定义的变量,保证有安全值。我需要这样做,因为如果我将结果['data\u table']=data\u table
和“插入到%(data\u table)s…
,我会得到错误:(1064,”您的SQL语法有错误…在“my_data_table”(我的数据表)附近
Dynamic SQL with the the fly table names通常是一种设计味道。如果没有更多信息,我只能(再次)建议这通常是一个坏主意。