Python MySQL查询格式:unicode和encode问题

Python MySQL查询格式:unicode和encode问题,python,mysql,unicode,utf-8,Python,Mysql,Unicode,Utf 8,我有一个包含西班牙语、德语等信息的数据库,我想我已经知道了如何处理这个问题,但它看起来不起作用: 以下是我目前的处理方式: formatted_user_name = user_name.replace("__", " ") # this is domain related query_user_id = ur'''SELECT user_id from user where user_name like " {uName}"'''.format(uName=unicode(formatte

我有一个包含西班牙语、德语等信息的数据库,我想我已经知道了如何处理这个问题,但它看起来不起作用:

以下是我目前的处理方式:

formatted_user_name = user_name.replace("__", " ") # this is domain related 
query_user_id = ur'''SELECT user_id from user where user_name like "  {uName}"'''.format(uName=unicode(formatted_user_name,'utf-8', errors='strict'))
self.cur2.execute(query_user_id.encode('utf-8'))
但我得到了以下错误:

    query_user_id = ur'''SELECT user_id from user where user_name like "{uName}"'''.format(uName=unicode(formatted_user_name,'utf-8', errors='strict'))
TypeError: decoding Unicode is not supported

我的问题是,这是格式化具有奇怪字符的查询的最佳方法吗?

好吧,这个错误是因为
格式化的\u user\u name
已经是
unicode
,所以您不需要(而且您不能)再次将其转换为
unicode
。@univerio我如何避免在用户名中使用引号,如“Matheus”LP“外部引号用于用户名,而不是自己格式化查询(易受SQL注入攻击,并且不总是正确转义),您应该让驱动程序来处理它:
cursor.execute(“从user where user\u name like%s”中选择user\u id,(格式化的用户\u name),)
@univerio谢谢,但尝试了这个自我。cur2.execute(query\u user\u id%(格式化的用户\u name))仍然不起作用不,您需要将元组作为第二个参数传递给
cursor.execute
。请注意,字符串和元组之间没有
%
,右括号前有一个逗号。试着完全按照我写的那样调用
.execute()