[英]Writing a simple query, getting a unicodeEncodeError, python 2.7
查询:
query = "SELECT * from "+str(tablename)+" where user='"+str(user)+"' AND review_title='"+rt+"'"
错误信息:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: ordinal not in range(128)
编码:
rt = review_title.replace("'", "\\'")
rt = rt.replace('"', '\\"')
rt = unicode(rt).encode('utf-8')
query = "SELECT * from "+str(tablename)+" where user='"+str(user)+"' AND review_title='"+rt+"'"
在这种情况下,表名是'ta_rest_review'
, user
是'KANNONEPL...'
而rt
是'Excelente pero \\"OJO a la CUENTA\\"'
你不应该使用字符串格式化插值数据。 请改用SQL参数!
为数据库驱动程序使用适当的查询参数语法,它将使用问号或%s
占位符:
cursor.execute(
'SELECT * from {0} WHERE user=%s AND review_title=%s'.format(tablename),
(user, rt)
)
您仍然必须插值表名( 绝对确保它是现有的表名,不要用用户输入来确定它!)
然后,数据库驱动程序可以为您正确地转义user
和rt
值,包括将Unicode值编码为数据库支持的编码。
此外,如果尝试自己“转义”数据库输入,则可以避免出现SQL注入安全漏洞的风险。
查看您的数据库驱动程序文档。 该模块应该有一个paramstyle
变量 ,该变量定义驱动程序支持哪种样式的参数占位符,并说明是否支持多种样式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.