2012-02-11 55 views
0

我正在使用oursql Python库来与MySQL数据库交谈。我想编写代码来按名称或电子邮件地址搜索用户。这是代码我目前:如何使用qql语法与oursql Python库一起编写MySQL LIKE子句?

query = get_query() 
cursor.execute(""" 
    SELECT * 
     FROM users 
    WHERE full_name LIKE '%?%' 
     OR email LIKE '%?%';""", (query, query)) 

此代码抛出一个异常:

ProgrammingError: 0 parameters expected, 2 given

显然解析器认为问号是分开的单引号字符串,因此”不是个不做替代。有想法该怎么解决这个吗?

回答

3

%的在参数LIKE是要传递给DB-API模块的execute方法中的数据的一部分,所以他们需要传入的占位符的说法,而不是部分的一部分SQL查询本身。例如:

query = '%%%s%%' % (get_query(),) 
cursor.execute(""" 
    SELECT * 
     FROM users 
    WHERE full_name LIKE ? 
     OR email LIKE ?;""", (query, query)) 
1

,我认为这会工作,太:

query = get_query() 
cursor.execute(""" 
    SELECT * 
     FROM users 
    WHERE full_name LIKE '%' || ? || '%' 
     OR email LIKE '%' || ? || '%';""", (query, query))