2012-02-11 59 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))