洗禮靈魂,修鍊python(91)-- 知識拾遺篇 —— pymysql模組之python操作mysql增刪改查,pythonpymysql

來源:互聯網
上載者:User

洗禮靈魂,修鍊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了,本篇博文結束

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.