Python mysql 连接器 LIKE 对 unicode 值
Python mysql connector LIKE against unicode value
所以这是我的问题:我正在尝试 select 来自 table 的特定值
将其与 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
当您使用 cur.execute
的双参数形式时(因此将参数 tqd
传递给参数化的 sql、townQuery
),DB 适配器将为您引用参数。因此,删除 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"%Серов%",)
.
所以这是我的问题:我正在尝试 select 来自 table 的特定值
将其与 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
当您使用
中cur.execute
的双参数形式时(因此将参数tqd
传递给参数化的 sql、townQuery
),DB 适配器将为您引用参数。因此,删除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"%Серов%",)
.