我有一個小問題。我認爲我是f =做一些愚蠢的事情,但無法弄清楚mysqldb.exeute中的字符串替換問題
第一: 我想從python的mysql上激發一個動態構建的sql。它的簡單插入語句,但值中可以有雙引號和其他特殊字符。所以,我不知道該怎麼做。 後來我才翻過這個線程 - Stackoverflow
根據這一點,我嘗試下面的代碼
def fire_statement(stmt, value_tuple=None):
try:
if value_tuple == None:
cur.execute(stmt)
return True
else:
v = tuple(value_tuple)
cur.execute(stmt % v)
return True
except Exception, ex:
print ex
print "Query: '"+stmt+"'"
return False
我必須通過這個函數的動態創建語句和value_tuple我沒有其他辦法作爲列名並且這兩個值都將取決於外部條件。 qand另一條信息是傳遞的value_tuple最初是一個列表。
兩個條件都發生在該代碼,唉沒有一個的方法工作
條件1:當value_tuple =( '269', '1', '69', '1096', '1' , '3070801', '是', '1963', '6') 和語句= INSERT INTO XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,CAT
)VALUES(?,?,? ,?,?,?,?,?,?) 我收到此錯誤 - 並非在字符串格式化過程中轉換的所有參數
(顯然這條命令將curcurcute(stmt%v)更改爲cur.execute(stmt,v))。條件-2:當value_tuple =('269','1','69','1096','1','3070801','BE','1963','6')和stmt = INSERT INTO XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,CAT
)VALUES(%S%S%S%S%S%S%S,%S,% S) 它拋出這個錯誤 - (1054, 「未知列 '是' 在 '字段列表'」) 查詢:「INSERT INTO XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,CAT
)VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s)'
它似乎根本沒有被替換。但是,如果我做一個打印(語句%V)剛好在cur.execute然後將結果顯示爲 - INSERT INTO XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,CAT
)VALUES(269,1 ,69,1096,1,3070801,BE,1963,6)
這又顯然是不正確的,因爲它沒有在引號中包含字符串值。我相信這可能會導致錯誤。爲此,我現在幾個小時在開發週期中被嚴重阻止。請幫助
在此先感謝
謝謝你救了我的命:) – SRC