【问题标题】:Python challenging string encodingPython 具有挑战性的字符串编码
【发布时间】:2012-11-26 01:44:24
【问题描述】:

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

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 语句?

【问题讨论】:

    标签: python mysql sql


    【解决方案1】:

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

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

    providers 是原始列表。

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

    【讨论】:

    • 谢谢你,非常有帮助和很好的解释!
    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    相关资源
    最近更新 更多