2015-08-14 53 views
0

所以这里是我的问题:我试图从表 比较它与一个Unicode字符串的特定值。该值也是unicode。我正在使用 mysql.connector。服务器设置都是以utf8为导向的。当我在查询后运行 - 我得到一个空列表。当我运行它时没有使用'WHERE Title like '%s''部件,我得到了一组完整的值,并且它们在 输出中正确显示。相同的查询在服务器上的命令行中起作用。在那里值肯定是 。我错过了什么?Python的mysql连接器喜欢unicode值

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 

回答

0
  • 当您使用的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"%Серов%",)

+0

这就是问题 - 没有这些引号,它根本不起作用......抛出异常... –

+0

请发布完整的回溯错误消息。 – unutbu

+0

非常感谢!这个逗号是问题!现在它工作! –