洗禮靈魂,修鍊python(91)-- 知識拾遺篇 —— pymysql模組之python操作mysql增刪改查,pythonpymysql
首先你得學會基本的mysql動作陳述式:mysql學習
其次,python要想操作mysql,靠python的內建模組是不行的,而如果通過os模組調用cmd命令雖然原理上是可以的,但是還是不太方便,那麼這個問題,很早就有人想過了,而且還做出來了,不廢話,就是第三方模組pymysql和mysqldb了。
但是,python3暫不支援mysqldb,pymysql卻是python2和3都支援的
所以,本篇博文說說pymysql,學了pymysql,mysqldb其實你也會了
pymysql1.安裝
使用pip安裝:
2.使用
增:
1)固定資料插入:
#!usr/bin/env python#-*- coding:utf-8 -*-# author:yangvaimport pymysql# 建立資料庫連接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test')# 建立遊標,這裡的遊標你可以理解為文本操作裡的walk指標cursor = conn.cursor()# sql語句cursor.execute('insert into user(name,age,part_id) VALUES("ling",32,2)')# 提交資料,你可以理解為文本操作裡的flush()重新整理緩衝儲存為資料conn.commit()# 關閉串連cursor.close()conn.close()
在運行之前,先看下資料庫裡的資料:
好的,開始運行:
運行結果:
沒有報錯就是好訊息,再看下資料有變化沒有:
好的,插入進去了
先看圖:
其實你有沒有發現,這些都是固定的格式,就和socket差不多,就標註的那兩句是有變化的,第一句是串連資料庫等設定,第二據就是我們的sql語句,那麼問題就簡單了對吧?
然後,如果你插入的資料希望是中文的,還可以在第一句建立資料庫連接時時加一個參數charset:
# 建立資料庫連接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')
2)字串拼接活動插入:
那麼再看,如果我們讓使用者自己輸入待插入的資料呢:
其他不變,只修改這一部分
A:多個列資料插入
注意上面的VALUES()裡不用再加引號,因為input裡已經有引號了
運行結果:
B:如果你只是插入一單個資料,可以這樣:
C:那麼有朋友要問了,為什麼不這樣作字串拼接呢:
這個方法雖然也可行,但是是明令禁止的,因為可能會出現sql注入漏洞,而用上面的方法的話,execute()方法可以傳入兩個參數,自動幫我們字串拼接好了
D:插入一個可迭代對象:
#!usr/bin/env python#-*- coding:utf-8 -*-# author:yangvaimport pymysql# 建立資料庫連接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')# 建立遊標cursor = conn.cursor()user1 = input('請輸入待插入的姓名:')age1 = input('請輸入待插入的年齡:')id1 = input('請輸入待插入的部門id:')print('已記錄')user2 = input('請輸入待插入的姓名:')age2 = input('請輸入待插入的年齡:')id2 = input('請輸入待插入的部門id:')print('已記錄')li = [(user1,age1,id1), (user2,age2,id2) ]# sql語句cursor.executemany('insert into user(name,age,part_id) VALUES(%s,%s,%s)',li)# 提交資料conn.commit()# 關閉串連cursor.close()conn.close()
注意上面我插入sql語句的方法已經改成executemany,不然使用execute方法會報錯
運行結果:
改:
目前表裡的資料是這些:
還是上面那語句,只改了這一塊,其他不變
運行結果:
完全OjbK
刪:
先看下目前的資料:
同樣的,其他不變,就下面這一段有變化
運行結果:
一樣的OjbK
查:
#!usr/bin/env python#-*- coding:utf-8 -*-# author:yangvaimport pymysql# 建立資料庫連接conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='',db='test',charset='utf8')# 建立遊標cursor = conn.cursor()# sql語句cursor.execute('select * from user')print(cursor.fetchone())# 關閉串連cursor.close()conn.close()
注意:使用查詢語句時不用給commit()方法,因為沒有修改資料,只是把資料拿出來而已,增刪改都有對資料進行修改的操作,所以需要使用commit
能理解吧?
查詢時,需要使用fetchone(),fetchmany([int]),fetchall()來得到查詢的結果
fetchone運行結果:
fetchmany運行結果:
fetchall()運行結果:
如果你想同時使用fetchone,fetchmany,fetchall的話,會成這樣:
我想,你應該能看懂,不用我多說,反正你知道它就和文本讀取操作是一樣的,都有指標
那麼你說,我就是想同時使用上面的三個fetch方法,並且我想讓它都能正確的取到希望的資料,這個怎麼辦呢?在文本操作裡我們可以使用seek()來設定指標位置,那麼這裡使用什麼方法呢?
cursor.scroll(0,mode='absolute') #相對當前位置移動cursor.scroll(0,mode='relative') #相對絕對位置移動
沒錯了,使用這個scroll方法就可以修改指標位置了
好的,現在再看看:
完美!O了,本篇博文結束