Python操作Mysql資料庫入門——查看和增加記錄
作者:王大偉 Python愛好者社區唯一小編,請勿轉載,謝謝。
出處:Python操作Mysql資料庫入門——查看和增加記錄小編配套免費視頻教程:Hellobi Live | 破冰入門Python 課程內容:1、Anaconda安裝2、jupyter常用操作3、Python基本數據類型4、Python基本運算和表達式5、Python程序基本控制流程(順序,分支,循環)6、Python特色數據類型(列表,元組,字典,集合)7、Python函數8、Python模塊導入使用之time、random模塊9、Python異常處理10、Python文件操作 11、Python後續學習提升方向和建議公眾號:Python愛好者社區(微信ID:python_shequ),關注,查看更多連載內容
前言
最近學了一下sql,因為做數據分析不會sql真不行。
平時學的都是Python,所以如果要用pandas做數據分析,數據除了導入excel和csv文件,
應該還要會從資料庫中導入數據到Python中,於是我進行了以下的學習和探索。
環境
Python 3.X
IDE : juyter notebook
安裝必要的模塊
進入:
http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

找到適合自己的版本
下載到本地(我的下載到e:盤根目錄)
然後打開cmd如下圖安裝

這裡推薦本地安裝
使用Python連接資料庫
import MySQLdbn
如果導入模塊沒報錯,恭喜你,安裝模塊成功了!
conn = MySQLdb.connect(n host = 127.0.0.1,#本地地址n user = root,#一般默認用戶名n passwd = ********,#本地資料庫登錄密碼n db = test,#資料庫名稱n port = 3306,#安裝mysql默認的埠號n charset = utf8#設置資料庫統一編碼n)n
通過connect方法連接本地mysql資料庫,這裡要注意你要修改的或許是登錄密碼和資料庫名稱
創建游標
首先,我們要創建一個游標
cursor = conn.cursor()n
什麼是游標呢?
游標就相當於一個緩衝區,存放暫時的結果(這是我的理解)
就像去超市買買買,你可能要推一個手推車,這裡的手推車就像游標,推著手推車去對應的貨架完成挑選操作,而手推車最終會在出超市時候清空
觀察資料庫

我本地的資料庫test中有個tdb_goods的表
表的內容如上圖所示
有商品的id,名稱,種類id,品牌id,是否在售和是否下架幾個欄位
一共有23條記錄
獲取數據
我們使用select語句可以獲取數據
cursor.execute(SELECT * FROM `tdb_goods`;)ndata = cursor.fetchone()#取一條數據nprint(data)n
首先我們用游標的execute方法執行一句sql語句獲取tdb_goods中的所有數據
然後使用游標的fetchone方法取出其中一條記錄並且展現出來

如上圖,我們取出的數據是元組形式
當然,我們應該養成打開後關閉的好習慣,所以,在操作結束,應該斷開與資料庫的連接
conn.close()n
異常處理
當我們在操作時,希望和在mysql資料庫中一樣,異常時會提示異常信息
那麼我們就要加入異常處理模塊
try:n conn = MySQLdb.connect(n host = 127.0.0.2222,n user = root,n passwd = ********,n db = test,n port = 3306,n charset = utf8n )nexcept MySQLdb.Error as e:n print(Error:%s % e)n

這裡異常時,就將異常的信息告知我們了
我們將以上代碼整理一下:
import MySQLdbnntry:n conn = MySQLdb.connect(n host = 127.0.0.1,n user = root,n passwd = ********,n db = test,n port = 3306,n charset = utf8n )n n cursor = conn.cursor()n cursor.execute(SELECT * FROM `tdb_goods`;)n data = cursor.fetchone()n print(data)n n conn.close()nnexcept MySQLdb.Error as e:n print(Error:%s % e)n

當我們將fetchone改成fetchall時候,就是取出所有信息了

使用面向對象編程
如果你熟悉面向對象編程或者看過我寫的面向對象編程入門系列(小姐姐系列)
傳送門:
Python面向對象編程從零開始(1)——從沒對象到有對象
Python面向對象編程從零開始(2)—— 與對象相互了解
Python面向對象編程從零開始(3)—— 小姐姐請客上篇
Python面向對象編程從零開始(4)—— 小姐姐請客下篇
Python面向對象編程從零開始(5)—— 小姐姐要買房
如果你還沒接觸過面向對象編程,看完以上5篇至少對接下來的內容理解上不存在問題
import MySQLdbnnclass Mysql(object):n n def __init__(self):n self.connect()n n def connect(self):nn try:n self.conn = MySQLdb.connect(n host = 127.0.0.1,n user = root,n passwd = ********,n db = test,n port = 3306,n charset = utf8n )n n except MySQLdb.Error as e:n print(Error:%s % e)nn def close_conn(self):n try:n if self.conn:n self.conn.close()n except MySQLdb.Error as e:n print(Error:%s % e) n n def get_a(self):n n sql = select * from `tdb_goods` where `cate_id` = %s; n cursor = self.conn.cursor()n cursor.execute(sql,(1,))n data = cursor.fetchone()n print(data)n cursor.close()n self.close_conn()n ndef main():n object = Mysql()n object.get_a()n nif __name__ == __main__:n main()n
註:這裡定義了一個類叫Mysql,然後用類創建一個對象名為object,在創建對象的時候,類的初始化時調用連接資料庫函數
創建了一個叫object的對象,使用對象的get_a方法從資料庫tdb_goods中選出cate_id=1的一條記錄,在get_a函數最後位置斷開資料庫連接
結果如下:

插入記錄到資料庫
import MySQLdbnnclass Mysql(object):n n def __init__(self):n self.connect()n n def connect(self):nn try:n self.conn = MySQLdb.connect(n host = 127.0.0.1,n user = root,n passwd = ********,n db = test,n port = 3306,n charset = utf8n )n n except MySQLdb.Error as e:n print(Error:%s % e)nn def close_conn(self):n try:n if self.conn:n self.conn.close()n except MySQLdb.Error as e:n print(Error:%s % e) n n def get_a(self):n n sql = select * from `tdb_goods` where `cate_id` = %s; n cursor = self.conn.cursor()n cursor.execute(sql,(1,))n data = cursor.fetchone()n print(data)n cursor.close()n self.close_conn()n n def add_a(self):n sql = "insert into `tdb_goods`(`goods_name`,`cate_id`,`brand_id`,`goods_price`,`is_show`,`is_saleoff`) value (%s,%s,%s,%s,%s,%s);"n cursor = self.conn.cursor()n cursor.execute(sql,(偉哥牌notebook,8,1,66666,1,0))n cursor.close()n self.close_conn()n ndef main():n object = Mysql()n object.add_a()n nif __name__ == __main__:n main()n
註:這裡,將一條記錄插入了資料庫,但是當我執行完這條語句(沒報錯)
刷新資料庫並沒有新增一條記錄
劃重點:在這裡,有一個self.conn.commit(),這個叫提交,如果不寫這句,就無法將所做修改保存的資料庫中
加上這個之後(加在以下兩句之間):


可以看到,數據成功寫入資料庫了~
如果運行代碼報錯,很可能是你的資料庫名和資料庫登錄密碼沒有修改~
文中如有錯誤和敘述不妥之處,望指正。
推薦閱讀:
※MySQL學習筆記(二)索引與視圖
※爬蟲的資料庫選型,redis, leveldb, mongodb, mysql 選哪個?
※mysql是如何工作的?

