2015-08-14 56 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

非常感謝!這個逗號是問題!現在它工作! –