我有以下提供商列表(俄语):
providers = [u'\u041e\u041e\u041e "\u041a\u0432\u0430\u0440\u0442\u0430\u043b \u041b\u0435\u043e\u043f\u043e\u043b\u0438\u0441"', u'\u0426\u0435\u043d\u0442\u0440\u0430\u043b']
这些显然是在unicode中。以前,要执行SQL SELECT,我正在做:
providers = tuple([str(item) for item in providers]) sql += " WHERE provider IN {} GROUP BY date ORDER BY date ASC".format(repr(providers)) cursor.execute(sql,)
现在,由于列表项使用的是unicode,因此我遇到了UnicodeEncodeError。
UnicodeEncodeError
我将如何正确执行此sql语句?
您不应该.format()用来在sql查询中包含值。改用sql参数:
.format()
sql += " WHERE provider IN ({}) GROUP BY date ORDER BY date ASC".format(', '.join(['%s'] * len(providers))) cursor.execute(sql, providers)
providers原始清单在哪里。
providers
想法是in使用与列表中提供者数量匹配的SQL参数语法,通过测试生成SQL查询:WHERE provider in (%s, %s) ...对于两个提供者的列表。是的,MySQLdb sql参数语法与老式的python格式语法相呼应,但不是同一回事。
in
WHERE provider in (%s, %s) ...