【问题标题】:Python mysql connector LIKE against unicode valuePython mysql 连接器 LIKE 针对 unicode 值
【发布时间】:2015-08-14 17:15:54
【问题描述】:

所以这是我的问题:我正在尝试从表中选择一个特定值 将其与 unicode 字符串进行比较。该值也是 unicode。我在用 mysql.connector。服务器设置都是面向 utf8 的。当我跑 以下查询 - 我得到一个空列表。当我在没有'WHERE Title like '%s'' 部分的情况下运行它时,我得到了一整套值,它们正确显示在 输出。相同的查询在服务器上的命令行中工作。值为 肯定有。我错过了什么?

conn = sql.connect(host='xxxxxxx', user='xxx', password='xxx', database='db', charset="utf8")

cur = conn.cursor()

townQuery = (u"""SELECT * FROM Towns  WHERE Title like '%s' """)
tqd = (u"%" +u"Серов"+u"%")
cur.execute(townQuery, tqd)

for  i in cur:
    print i

【问题讨论】:

    标签: python mysql unicode sql-like


    【解决方案1】:
    • 当您使用 cur.execute 的 2 参数形式(因此将参数 tqd 传递给参数化 sql townQuery)时,数据库适配器将为您引用参数。因此,删除 townQuery%s 周围的单引号:

      townQuery = u"""SELECT * FROM Towns  WHERE Title like %s"""
      tqd = [u"%Серов%"]
      cur.execute(townQuery, tqd)
      
    • 另请注意,第二个参数tqd 必须是序列,例如列表或元组。 u"%Серов%" 周围的方括号使 [u"%Серов%"] 成为一个列表。 u"%Серов%" 周围的括号不会使 (u"%Серов%") 成为元组,因为 Python 将括号中的数量计算为 unicode。要使其成为元组,请在右括号前添加一个逗号:(u"%Серов%",)

    【讨论】:

    • 这就是问题所在 - 没有这些引号,它根本无法工作......抛出异常......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2010-12-28
    • 2018-06-27
    • 2016-01-16
    • 1970-01-01
    相关资源
    最近更新 更多