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']

これらは明らかにユニコードです。以前は、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,)

さて、リスト項目はユニコードであるため、私はに遭遇し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) ...2プロバイダーリストの場合。はい、MySQLdb sqlパラメーター構文は古いスタイルのpythonフォーマット構文を反映していますが、同じものではありません。

于 2012-12-07T20:36:40.567 に答える