(該記錄對應文章《豆瓣電影top250基本資訊抓取》)
折騰了將近兩天才把mysql資料庫功能給實現了。
經過這兩天的實踐,發現了自己的很多知識點漏洞。尤其是資料編碼型別。每次要想實現把資料存入txt或其他文字檔案,都要花費好長時間,雖然大致實現思路很清晰,但是總是會遇到很多細枝末節的障礙,基礎不牢啊。
說說從昨天到現在一直折騰pymysql的經歷吧。(腦袋很混亂。估計下文會更紊亂。。。。)。不過如果你能堅持看完,絕對會有收穫,沒有的話你來找我(反正你也找不到)
首先是最簡單的pymysql.connect()語句的實現就耗了我大半天的時間。
db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8")
就是這麼簡單的一行**。。。簡直蠢哭了
我一直以為 user 和 password 兩項是隨便填的。。隨便。。填。。的。。。
所以我付出了慘痛代價,mysql軟體安裝了三四次,電腦重啟無數次。。。最後才慢慢悟出了真理,原來他們是我在安裝mysql的時候自己設定的。
另外我要提醒一下小夥伴們,如果你安裝mysql只是為了學習的話,建議密碼不要太複雜,否則你會後悔的,相信我,恩。
db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8")
上面這行**中申明了資料庫是doubanmovie,能這麼寫的前提是你已經提前建立了這個名為doubanmovie的資料庫,否則。。。崩。。報錯,別問我是怎麼知道的。
好了,資料庫的建立問題已經解決,那麼接下來就是資料表的建立了。**很簡單,我輕輕鬆鬆的就寫出來了(傲嬌臉)
cursor.execute("create
table movie(name text, star text, quote
text, info text)")
但就是這麼簡單的語句也有很多坑。這並不是說這個語句有錯,而是它對後面程式的除錯很麻煩。因為這個語句執行一次後,如果再執行顯然就會報錯。你問為什麼?因為已經存在名為movie的資料表了啊。所以我為了測試資料,就得反反覆覆的把這個語句注釋掉。
cursor.execute("create
table
ifnot
exists movie(name text, star text, quote
text, info text)")
第三個bug就是資料插入操作。
這是浪費時間最長的過程,中途差點想放棄了,不過幸好堅持住了~~
具體的原因牽扯到**,源頭很長就不解釋了,不過有興趣的可以看看**。
值得一提的是在這個過程中學到了乙個很棒的用法(在牛人看來肯定很一般,但是這個辦法確實解決了我的問題)。
就是插入語句,我們都知道插入語句是
insert
into 表名(變數名 資料型別) values(......);
我要插入的內容存放在字典中,所以最開始的辦法超級原始,但不知道為什麼就是不行(明明邏輯是對的).廢話不多說看栗子:
假如我的資料存放在movies列表(list)裡,資料存放在字典(dict)裡
movies = [
,
]
資料處理,執行插入操作
為行文方便,**有所簡略
db = pymysql.connect(host="localhost",user="root",password="123456",db="doubanmovie",charset="utf8")
cursor = db.cursor()
for movie in sort_movies:
star = movie["star"]
name = movie["name"]
info = movie["info"]
quote = movie["quote"]
sql = "insert into movie(star,name,info,quote) values('%s', '%s', '%s', '%s');" % (star, name, info, quote)
try:
cursor.execute(sql)
db.commit()
print("資料插入成功\n*************\n")
except exception as e:
raise e
db.close()
以前的原始方法是
sql = "insert into movie(star,name,info,quote) values(" + r'"' + star + r'","' + name + r'","'+ info + r'","'+ quote + r'",")'
經查stackoverflow,得到如下解決辦法(上面**中已呈現)
sql = "insert into movie(star,name,info,quote) values('%s', '%s', '%s', '%s');" % (star, name, info, quote)
這個可以很好的生成mysql執行語句。
stackoverflow的回答中有的人建議把上面**中的 % 改為 ,,具體啥原因參見stackoverflow python mysql statement returning error
還有得記得加上這行**
db.commit()
往後版本希望擴充套件的功能:
視覺化資料
干巴爹!!!!!
大家也可以在我的部落格
pymysql使用心得記錄
該記錄對應文章 豆瓣電影top250基本資訊抓取 折騰了將近兩天才把mysql資料庫功能給實現了。經過這兩天的實踐,發現了自己的很多知識點漏洞。尤其是資料編碼型別。每次要想實現把資料存入txt或其他文字檔案,都要花費好長時間,雖然大致實現思路很清晰,但是總是會遇到很多細枝末節的障礙,基礎不牢啊。說說...
Qt 學習記錄 執行緒使用心得
c 建立執行緒有很多辦法和輪子,qt也提供幾種。過一段時間不用就會淡忘,然後去找別人的分享。乾脆自己記錄下。看documentation以及其他人分享的教程加上自己日常使用的理解,如果錯誤請指正。qt 學習記錄 執行緒使用 繼承qthread,重寫run函式 壞處 如果執行緒很多的話建立和刪除開銷很...
frameset 使用心得
欲明白本篇 html徹底剖析 之標記分類,請看 標記一覽 也請先明白圍堵標記與空標記的分別,請看 html概念 框架概念 謂框架便是網頁畫面分成幾個框窗,同時取得多個 url。只需要 即可,面所有框架標記需要放在乙個總起的 html 檔,這個檔案只記錄了該框架如何分割 不會顯示任何資料,所以不必放入...