2

我有以下提供商列表(俄语):

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.

我将如何正确执行此 sql 语句?

4

1 回答 1

4

您不应该使用.format()在 sql 查询中包含值。改用 sql 参数:

sql += " WHERE provider IN ({}) GROUP BY date ORDER BY date ASC".format(', '.join(['%s'] * len(providers)))

cursor.execute(sql, providers)

providers原始列表在哪里。

in这个想法是使用与列表中提供者数量相匹配的 SQL 参数语法生成带有测试的 SQL 查询:WHERE provider in (%s, %s) ...对于两个提供者列表。是的,MySQLdb sql 参数语法与旧式 python 格式化语法相呼应,但不是一回事。

于 2012-12-07T20:36:40.567 回答