2017-05-29 27 views
-1

我從網上獲取數據並通過以下代碼將其插入到mysql數據庫中。在我的SQL語法中,在數據表中添加記錄似乎存在問題。錯誤消息如下:在mysql中使用mysql.connector插入數據到mysql中的語法錯誤

有人可以幫忙嗎?

錯誤消息:

> File "D:\Clouds\Dropbox\programming\Python\get youbike info.py", line 
> 33, in <module> 
>  cursor.execute(insert_data) File "C:\Python34\lib\site-packages\mysql\connector\cursor.py", line 559, 
> in execute 
>  self._handle_result(self._connection.cmd_query(stmt)) File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 
> 494, in cmd_query 
>  result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) File 
> "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 
> 396, in _handle_result 
>  raise errors.get_exception(packet) mysql.connector.errors.ProgrammingError: 1064 (42000): You have an 
> error in your SQL syntax; check the manual that corresponds to your 
> MariaDB server version for the right syntax to use near '%s, %s, %s, 
> %s, %s, %s, %s, %s, %s)' at line 1 

我的代碼

import urllib.request 
import gzip 
import json 
import mysql.connector 
url = "http://data.taipei/youbike" 
urllib.request.urlretrieve(url,"data.gz") 
f=gzip.open('data.gz','r') 
jdata = f.read() 
f.close() 
data = json.loads(jdata.decode('utf-8')) 
stationNo =1 
cnx=mysql.connector.connect(user='root', host='127.0.0.1', database='bike') 
cursor = cnx.cursor() 
for key,value in data["retVal"].items(): 
    sno = value["sno"] 
    sna = value["sna"] 
    sarea = value["sarea"] 
    lat = value["lat"] 
    lng = value["lng"] 
    ar = value["ar"] 
    sareaen = value["sareaen"] 
    snaen = value["snaen"] 
    aren = value["aren"] 
    print("NO." + sno + " " + sna) 
    stationNo+=1 
    insert_data = ("INSERT INTO info " 
        "(sno, sna, sarea, lat, lng, ar, sareaen, snaen, aren) " 
        "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)") 

    cursor.execute(insert_data) 
    cnx.commit() 
cursor.close() 
cnx.close() 
+1

它不應該是'cursor.execute (insert_data,sno,sna,sarea,...)'? – kuro

回答

1

你沒有任何數據傳遞到值部分,佔位符%S是一片空白,因爲你沒有傳遞數據

insert_data = ("INSERT INTO info " 
        "(sno, sna, sarea, lat, lng, ar, sareaen, snaen, aren) " 
        "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)") 

    cursor.execute(insert_data,(sno, sna, sarea, lat, lng, ar, sareaen, snaen, aren)) 

試試這個

+0

非常感謝!你的建議可以解決。 –

+0

歡迎您參觀@VincentChen – Exprator

-1

爲了幫助故障查找,做一個

print "("INSERT INTO info " 
     "sno, sna, sarea, lat, lng, ar, sareaen, snaen, aren) " 
     "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)") 

,並檢查值的任何雙引號;任何的存在肯定會導致SQL中斷。另外,通過「從網上獲取數據」並將其直接插入到代碼中,您可以將應用程序打開以應對某些非常嚴重的SQL插入攻擊,因此最好花一些時間來消毒網頁輸入,除了剝掉引號。