2016-02-27 79 views
0

我在抓取一個網站並從中獲取公司詳細信息,現在我試圖將數據存儲到數據庫中。但我得到了一些錯誤,如如何使用python中的PyMYSQL將數據存儲到數據庫中

raise InternalError(errno, errorvalue) 
pymysql.err.InternalError: (1054, "Unknown column 'companyaddress' in 'field list'") 

這裏是我的代碼

for d in companydetail: 
    lis = d.find_all('li') 
    companyname = lis[0].get_text().strip() 
    companyaddress = lis[1].get_text().strip() 
    companycity = lis[2].get_text().strip() 
try: 
    companypostalcode = lis[3].get_text().strip() 
    companypostalcode = companypostalcode.replace(",","") 

except: 
    companypostalcode = lis[3].get_text().strip() 
try: 
    companywebsite = lis[4].get_text().strip() 
except IndexError: 
    companywebsite = 'null' 
print (companyname)       
print (companyaddress) 
print (companycity) 
print (companypostalcode) 
print (companywebsite) 
try: 
    with connection.cursor() as cursor: 
    print ('saving to db') 
    cursor.execute("INSERT INTO company(companyname,address,city,pincode,website) VALUES (companyname,companyaddress,companycity,companypostalcode,companywebsite)") 
    connection.commit() 
    connection.close()        

我得到我的數據,我想,但我不能夠將數據存儲到數據庫中。 結果我得到的同時進行打印(公司名稱)和打印(campanyaddress)是:

NINGBO BOIGLE DIGITAL TECHNOLOGY CO.,LTD. 
TIANYUAN INDUSTRIAL ZONE CIXI NINGBO 
ZHEJIANGNINGBO 
315325 
http://www.boigle.com.cn 

回答

1

你不能簡單地使用查詢字符串中的變量名稱爲你做:

cursor.execute("INSERT INTO company(companyname,address,city,pincode,website) VALUES (companyname,companyaddress,companycity,companypostalcode,companywebsite)") 

相反,通過你的變量到查詢使其參數

params = (companyname, companyaddress, companycity, companypostalcode, companywebsite) 
cursor.execute(""" 
    INSERT INTO 
     company 
     (companyname, address, city, pincode, website) 
    VALUES 
     (%s, %s, %s, %s, %s) 
""", params) 
+0

它的工作只是一個時間後,它給錯誤: 在處理上述異常,另一個異常: 回溯(最近通話最後一個): 文件「d:\蟒蛇\ new.py」,行112,in connection.close() 文件「C:\ Users \ amanp \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ pymysql \ connections.py」,行701 引發err.Error(「已關閉」) pymysql.err.Error:已關閉 –

+0

@SiteshRanjan是的,因爲你調用'connection.close()'。 – alecxe

+0

@ alecxe。是的,我糾正了它。但我收到另一個錯誤: 警告(來自警告模塊): 文件「C:\ Users \ amanp \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ pymysql \ cursors.py」,第309行 self._do_get_result() 警告:錯誤的字符串值:'\ xEF \ xBC \ x8Cifl ...'列1'的網站' –

0

cursor.execute("INSERT INTO company(companyname,address,city,pincode,website) VALUES (companyname,companyaddress,companycity,companypostalcode,companywebsite)") 

第二個括號中的值被解釋爲表字段,而不是python變量。嘗試

cursor.execute("""INSERT INTO company(
      companyname,address,city,pincode,website) 
     VALUES (%s, %s, %s, %s, %s)""", 
     (companyname, companyaddress, companycity, 
     companypostalcode, companywebsite)) 

改爲。你可能也想諮詢the docs

+0

只工作了一次之後它給出了錯誤: [上述例外的,另一個異常: 回溯(最近最後調用): 文件 「d:\蟒\ new.py」,線路112,在 connection.close()時 文件「C:\用戶\ amanp \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ pymysql \ connections.py「701行,在clo se raise err.Error(「已關閉」) pymysql.err.Error:已關閉] –

+0

猜測問題中的縮進是錯誤的,並且cursor.execute()在迭代中完成for for companydetail :'。在這種情況下,只需通過對它們進行解壓縮,將「close()'和'commit()'調用移動到該循環外部。 – flaschbier

+0

是的,我糾正了它但我收到另一個錯誤: 警告(來自警告模塊): 文件「C:\ Users \ amanp \ AppData \ Local \ Programs \ Python \ Python35-32 \ lib \ site-packages \ pymysql \遊標。py「,行309 self._do_get_result() 警告:錯誤的字符串值:'\ xEF \ xBC \ x8Cifl ...'列1'的網站' –

相關問題