python MySQLdb 模組

來源:互聯網
上載者:User

標籤:python mysqldb

  用python操作mysql資料庫,就會用到MySQLdb模組,這個模組其實和檔案資料庫SQLite的操作方式一樣的

先來看一下這模組的簡單實用

插入資料

import MySQLdb#建立一個mysql的連線物件  conn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)#建立操作遊標,一切對資料庫的操作都是調用遊標裡的方法  cur = conn.cursor()"""這裡要注意,和其他模組不同的就是value裡面參數的預留位置,在mysql裡面不管要value的值是什麼類型,預留位置只有%s一種模式。這要切記~~!! """ reCount =cur.execute(‘insert into UserInfo(Name,age) values(%s,%s)‘,(‘alex‘,18))#執行插入語句會返回成功插入的條目數。可以將這個條目數列印出來print reCountconn.commit()  cur.close()conn.close()

這段代碼有點資料庫基礎的的就可以看懂,其實就是在cur.execute()方法的括弧裡寫入要執行的sql語句就好了。


如果有多條語句需要插入,最簡單的使用for迴圈的方式插入資料。但是模組內建了executemany方法可以更加方便的實現多條語句同時插入的功能

import MySQLdbconn = MySQLdb.connect(host=‘127.0.0.1‘,user=‘root‘,passwd=‘1234‘,db=‘mydb‘)cur = conn.cursor()#以元組為單位,存入要插入的values值li =[     (‘alex‘,‘usa‘),     (‘sb‘,‘usa‘),]#這裡改成調用executemany()方法一次操作多條資料reCount = cur.executemany(‘insert into UserInfo(Name,Address) values(%s,%s)‘,li)conn.commit()cur.close()conn.close()print reCount


查詢操作是我們最常用的資料庫操作,模組也為我們提供了很多選項

查詢操作

import MySQLdbconn = MySQLdb.connect(host=‘192.168.10.105‘,user=‘wgw‘,passwd=‘123456‘,db=‘wgwtest‘)cur = conn.cursor()reCount = cur.execute(‘select * from user_list‘)#通過fetchone方法擷取一條結果print cur.fetchone()print ‘select %s lins‘%reCount

上面的代碼執行結果是

(1L, 1L, ‘wgw‘, ‘123456‘, 0L)select 3 lins

返回的統計結果是查詢到了3條資料,我們只獲得了一條。這是怎麼回事?這是因為我們使用了fetchone方法。這個方法不管查詢了多少條資料,它只取第一條。另外我們看到查詢結果裡面的有很多的L,這個L是表示我們查詢出來的數字類型是Long int 長整形的。


那如果我們要擷取所有的查詢結果怎麼辦呢?那就用fetchall()方法

#!/usr/bin/env python# -*-coding:utf-8-*-import MySQLdbconn = MySQLdb.connect(host=‘192.168.10.105‘,user=‘wgw‘,passwd=‘123456‘,db=‘wgwtest‘)cur = conn.cursor()reCount = cur.execute(‘select * from user_list‘)#通過fetchall方法擷取全部結果print cur.fetchall()print ‘select %s lins‘%reCount

這次的執行結果如下

((1L, 1L, ‘wgw‘, ‘123456‘, 0L), (2L, 2L, ‘alex‘, ‘123456‘, 1L), (3L, 3L, ‘eric‘, ‘123456‘, 0L))select 3 lins

這樣就查詢出來了所有資料條目,fetchall的運行結果是用一個大的元組包含了所有的資料條目,其中每一個資料條目都用一個小元組表示。但是這種元組套元組的方式也很麻煩。比如我們要取使用者名稱的欄位值,那需要對元組的內容進行切片,先切大的再切小的。是不是很麻煩?這個我們也有辦法解決。問題就是處在遊標對象身上


我們建立遊標的對象的時候用的語句是

cur = conn.cursor()

這種模式,預設擷取的結果都以元組形式展現。我們現在換一種建立對象的方法

cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)

這種方式指定了遊標以字典的形式返回資料,我們來看看效果。

先看看fetchone

#!/usr/bin/env python# -*-coding:utf-8-*-import MySQLdbconn = MySQLdb.connect(host=‘192.168.10.105‘,user=‘wgw‘,passwd=‘123456‘,db=‘wgwtest‘)#cur = conn.cursor()#指定遊標的資料傳回型別cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)reCount = cur.execute(‘select * from user_list‘)#通過fetchall方法擷取全部結果print cur.fetchall()print ‘select %s lines‘%reCount

運行結果如下

{‘tid‘: 1L, ‘passwd‘: ‘123456‘, ‘login_count‘: 0L, ‘uid‘: 1L, ‘name‘: ‘wgw‘}select 3 lines

返回的查詢結果變成字典形式了,字典的key就是欄位名稱,value就是我們查詢的欄位值。這樣我們通過fetchone[‘name‘]這可以獲得使用者名稱。別切片方式省事多了


再看看fetchall的效果

#!/usr/bin/env python# -*-coding:utf-8-*-import MySQLdbconn = MySQLdb.connect(host=‘192.168.10.105‘,user=‘wgw‘,passwd=‘123456‘,db=‘wgwtest‘)#cur = conn.cursor()#指定遊標的資料傳回型別cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)reCount = cur.execute(‘select * from user_list‘)#通過fetchall方法擷取全部結果print cur.fetchall()print ‘select %s lines‘%reCount

運行結果如下:

({‘tid‘: 1L, ‘passwd‘: ‘123456‘, ‘login_count‘: 0L, ‘uid‘: 1L, ‘name‘: ‘wgw‘}, {‘tid‘: 2L, ‘passwd‘: ‘123456‘, ‘login_count‘: 1L, ‘uid‘: 2L, ‘name‘: ‘alex‘}, {‘tid‘: 3L, ‘passwd‘: ‘123456‘, ‘login_count‘: 0L, ‘uid‘: 3L, ‘name‘: ‘eric‘})select 3 lines

看結果每個資料條目的內容已經用字典表示了,但是fetchall()方法還是會在結果最外層加個元組封裝。這是沒辦法的事情了,但那也比最原始的模式要好操作的多。


使用MySQLdb模組,個人的感覺就3點

1、遊標的擷取類型指定為字典類型

2、如果查詢結果只有一條就用fetchone()方法,這樣可以少處理一層元組

3、好好學學資料庫SQL語言,這個模組的核心還是調用資料庫的SQL實現的。SQL寫的不行其他的都白瞎了

本文出自 “霹靂豆包” 部落格,謝絕轉載!

python MySQLdb 模組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.