2013-05-08 98 views
2

我收到以下錯誤:Python的SQL ValueError異常

query=query%db.literal(args) 
ValueError: Unsupported Format character 'P' (0x50) 

這裏是我的查詢中,從蟒蛇執行(注意phraseList是一個列表)

for elem in phraseList: 
    cursor.execute("""SELECT PHRASE,COUNT(CASEID) FROM TEST.NER WHERE LABEL LIKE '%PART%' \ 
    AND CASEID IN (SELECT DISTINCT CASEID FROM TEST.NER WHERE LABEL LIKE '%CONDITION%'\ 
    AND PHRASE LIKEPHRASE LIKE %s""",(elem,)) 

回答

2

MySQLdb重載Python字符串格式化語法和%P部分%PART%被視爲字符串格式化表達式。

爲了防止這種情況,你需要的字符一倍至%%

for elem in phraseList: 
    cursor.execute("""SELECT PHRASE,COUNT(CASEID) FROM TEST.NER WHERE LABEL LIKE '%%PART%%' \ 
    AND CASEID IN (SELECT DISTINCT CASEID FROM TEST.NER WHERE LABEL LIKE '%%CONDITION%%'\ 
    AND PHRASE LIKEPHRASE LIKE %s""",(elem,)) 
0

這裏是什麼讓錯誤消失:

for elem in phraseList: 
    part='%part%' 
    condition='%condition%' 
    query="SELECT PHRASE,COUNT(CASEID) FROM TEST.NER WHERE LABEL LIKE %s \ 
    AND CASEID IN (SELECT DISTINCT CASEID FROM TEST.NER WHERE LABEL LIKE %s \ 
    AND PHRASE LIKE %s)" 
    params=(part,condition,elem) 
    cursor.execute(query,params) 
+0

現在'part'和'condition'插值沒有''%通配符和已經小寫。儘管使用它們作爲SQL參數會對此有所幫助,但如果您改變含義,則這不起作用。 – 2013-05-08 08:40:20

+0

@Martjin:實際上現在它甚至可以與上面的part ='%part%'一起工作 – Yavar 2013-05-08 08:52:20

+0

您仍然匹配小寫文本而不是大寫。意思是不同於原來的。 – 2013-05-08 09:03:24