學習筆記
最近在學習使用python撰寫爬蟲爬取自己學校網站的資訊并存入mysql中,在爬取程序中例外順利,但是在存入Mysql的程序中卻踩了好幾個坑,分享一下在用pymysql存資料時踩過的幾個坑,
Pymysql向mysql存入資料,我寫的是先鏈接資料庫,然后用字串的形式撰寫好mysql的指令塊,再通過pymysql的execute和commit上交執行,所以其實在這個程序中容易發生錯誤的就是這些mysql指令的撰寫,
遇到的其中一個坑就是:
pymysql.err.InternalError: (1054, "Unknown column 'XXXXX' in 'field list'")
這個坑上網搜了一下網上都是這樣的:
pymysql.err.InternalError: (1054, "Unknown column 'nan' in 'field list'")
這說是在存入mysql時要將nan替換成none,然后我就根據這個去檢查我的代碼,然后還是沒發現錯誤在哪,最后又上網查,終于查到了我那個報錯,才知道這是由于引號引起的,
最初寫的插入Mysql的指令是:
'''INSERT INTO XXXXXXX(標題, 日期, 作者, 閱讀量, 正文) VALUES(%s,%s,%s,%s,%s)'''
然后改成了:
'''INSERT INTO XXXXXXXX(標題, 日期, 作者, 閱讀量, 正文) VALUES("%s","%s","%s","%s","%s")'''
這個報錯就解決了,
還有一個坑,讓我搞了好久才搞定,就是:
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the...
對于這個報錯,上網一搜,就有很多,說是在將資料插入到mysql程序中,這些python的字串需要轉義,要用:
pymysql.escape_string(字串變數)
來處理,然后我就試了一下,一開始我直接把execute陳述句中的元組args加上這一句,然后報錯:
AttributeError: 'tuple' object has no attribute 'translate'
然后我又把這個元組建立時每個變數都加上這個函式,還是沒用,還是顯示
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the...
可是還是上網搜,都是說需要轉義,又試了改成execute(sql%args),和改成format但是就還是不行,然后我就試了一下新建一個python檔案重新寫,直接把要存進去的內容寫進字串,沒用爬蟲,然后他居然沒報錯!!
最后回到爬蟲的那一個檔案看了一下發現創建table的陳述句我寫的是:
'''reate table if not exists passage(
標題 char(100) not null,
日期 char(30) not null,
作者 char(50) not null,
閱讀量 char(20) not null,
正文 text(5000) not null)
'''
然后插入的陳述句:
'''INSERT INTO pasage(標題, 日期, 作者, 閱讀量, 正文) VALUES("%s","%s","%s","%s","%s")'''
把創建的passage寫成了pasage,將插入的pasage改為passage,再運行,它就過了,,,,
其實還遇到了:
TypeError: not all arguments converted during string formatting
這個是
'''INSERT INTO pasage(標題, 日期, 作者, 閱讀量, 正文) VALUES("%s","%s","%s","%s","%s")'''
這個陳述句中"%s"漏了一個加上就好了,
總的就是,寫mysql的指令時要仔細一些,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/240539.html
標籤:python
