2016-06-13 38 views
0

我想插入整篇文章到MySQL數據庫,但它沒有工作.. 我想我有一個編碼問題,因爲當我打印時,它開始 與'[u'。我試過一些代碼,但沒有奏效。內容/文章可能包含,"導致SQL文本搞砸無法插入文章到MySQL蟒蛇

這是我的代碼,它提高錯誤輸入..

k1 = str(mmhtml) 
    for filde in cur.fetchall(): 
     faliase = filde[0] 
     fpattern = filde[1] 
     furutan = filde[2] 
     fopsi = filde[3] 
     freplacer = filde[4] 
     k1 = re.sub(fpattern , freplacer, k1) 
     k2 = k1.encode('ascii') 

    Item['konten'] = k2.strip() 

    sqlinsert = "INSERT IGNORE INTO tb_hasil(title, \ 
      datee, content, author, ling) \ 
      VALUES ('%s', '%s', '%s', '%s', '%s')" % \ 
      (jdl, tgl, k2.strip() , sauto,str(response.url)) 
    try: 
     cur.execute(sqlinsert) 
    except: 
     print "error input" 

在此先感謝

+1

有在這裏打球多個問題,你提供你的輸入非常小的細節。看起來你正在傳遞一個列表作爲參數(''[u''作爲字符串格式化的結果)。對於初學者,**從不使用字符串格式**傳遞值(這裏是'%'運算符)。你根本不應該養成它的習慣。而是使用佔位符/準備好的語句。從'%s'格式化程序中去掉單引號,然後分別將參數元組傳遞給'''''''''''''''''''''''''''''將'%s'格式化程序的單引號分開並傳遞給'cur.execute()':'cur.execute(sqlinsert,(jdl,tgl,...))。這樣你就不必擔心逃脫自己。 –

+0

這不會修復你的代碼,但是通常是更安全的代碼。 –

+0

@IljaEverilä謝謝你的回覆,我試圖實現你的建議..我是新的python,所以我做了基於我發現的例子 – insecte

回答

0

嗨哪個庫你使用?

據我所知大多數庫實現DB-API公共。所以你可以通過防止sql注入的參數化來發送數據。

我使用Python中oursql和語法是:

curs.execute('SELECT * FROM `some_table` WHERE `col1` = ? AND `col2` = ?', 
(42, -3)) 

所以你用替換值是多少?並通過參數的元組

//curs.execute("... INTO Values (?, ?, ?)", (1,2,3)) 
+0

我使用mysqldb .. – insecte

+0

它也遵循DB-API規則: 只有%s比?例如//curs.execute(「... INTO值(%s,%s,%s)」,(1,2,3)) – cinatic