折騰了將近兩天才把mysql數據庫功能給實現了,。 經過這兩天的實踐,發(fā)現了自己的很多知識點漏洞,。尤其是數據編碼類型,。每次要想實現把數據存入txt或其他文本文件,都要花費好長時間,,雖然大致實現思路很清晰,,但是總是會遇到很多細枝末節(jié)的障礙,基礎不牢啊,。 說說從昨天到現在一直折騰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,,能這么寫的前提是你已經提前創(chuàng)建了這個名為doubanmovie的數據庫,,否則。,。,。崩。,。報錯,,別問我是怎么知道的。 好了,,數據庫的創(chuàng)建問題已經解決,,那么接下來就是數據表的創(chuàng)建了,。代碼很簡單,我輕輕松松的就寫出來了(傲嬌臉) - cursor.execute("create table movie(name text, star text, quote text, info text)")
但就是這么簡單的語句也有很多坑,。這并不是說這個語句有錯,,而是它對后面程序的調試很麻煩。因為這個語句執(zhí)行一次后,,如果再執(zhí)行顯然就會報錯,。你問為什么?因為已經存在名為movie的數據表了啊,。所以我為了測試數據,,就得反反復復的把這個語句注釋掉。 后來google,,百度查了一下,,得到了下面的解決辦法,加上"if not exists"就可以啦,。代碼如下: - cursor.execute("create table if not exists movie(name text, star text, quote text, info text)")
具體為什么就不解釋了,,實在不明白就百度翻譯一下,,因為太顯而易見了~~~ 第三個bug就是數據插入操作,。 這是浪費時間最長的過程,中途差點想放棄了,,不過幸好堅持住了~~ 具體的原因牽扯到代碼,,源頭很長就不解釋了,不過有興趣的可以看看代碼,。 值得一提的是在這個過程中學到了一個很棒的用法(在牛人看來肯定很一般,,但是這個辦法確實解決了我的問題)。 就是插入語句,,我們都知道插入語句是 - insert into 表名(變量名 數據類型) values(......);
我要插入的內容存放在字典中,,所以最開始的辦法超級原始,但不知道為什么就是不行(明明邏輯是對的).廢話不多說看栗子: 假如我的數據存放在movies列表(list)里,,數據存放在字典(dict)里 - movies = [
- {
- "name":"肖申克的救贖",
- "star":"9.6",
- "info":"電影介紹",
- "quote":"電影名句"
- },
- {
- ....
- }
- ]
數據處理,,執(zhí)行插入操作 為行文方便,代碼有所簡略 - 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執(zhí)行語句,。 stackoverflow的回答中有的人建議把上面代碼中的 % 改為 ,,具體啥原因參見stackoverflow Python MySQL Statement returning Error 還有得記得加上這行代碼
往后版本希望擴展的功能: 將數據項增加“年份”,即電影的上映年份 電影數據分析 評分情況 前100名中各國家所占比例 各種電影類型所占比例
可視化數據
干巴爹?。,。。,?!
當然如果有什么可以完善的也歡迎大家提出修改意見,,希望與大家一起學習,進步 大家也可以在我的博客中給我留言哈,,很高興能和大家交流溝通
|