python之MySQLdb模塊-創(chuàng)新互聯(lián)

防偽碼:忘情公子著

成都創(chuàng)新互聯(lián)服務(wù)項目包括孟連網(wǎng)站建設(shè)、孟連網(wǎng)站制作、孟連網(wǎng)頁制作以及孟連網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,孟連網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到孟連省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

 MySQLdb是用來通過python控制mysql數(shù)據(jù)庫的一個模塊。

 在說這個模塊之前,我們先來想一下在命令行模式下操作mysql數(shù)據(jù)庫的步驟,一般來說分為三步:

  1、連接數(shù)據(jù)庫;

  2、操作數(shù)據(jù)庫(通過sql語句);

  3、斷開數(shù)據(jù)庫連接

 按此思路可知,python中的MySQLdb也是需要經(jīng)過這三個步驟的,只不過不是在命令行模式下手工執(zhí)行而已。

 要想使用MySQLdb必須保證系統(tǒng)中有安裝MySQL-python這個軟件。

 本篇文章主要是講MySQLdb模塊的使用,至于安裝的步驟,請自行上網(wǎng)查閱。

 MySQLdb模塊在其內(nèi)部提供了以下幾個子模塊:

  connections:專門用來建立連接

  constants(package)

  converters:實現(xiàn)將python中的字符串轉(zhuǎn)換成mysql可以處理的數(shù)據(jù)類型

  cursors:游標?;谟螛税l(fā)送sql語句,獲取執(zhí)行結(jié)果

  release

  times

  

 MySQLdb模塊的常用方法:

在執(zhí)行以下方法時,前面的connect和cursor均要替換成其實例化的對象名稱。

  connect(*args, **kwargs):連接數(shù)據(jù)庫。常用參數(shù)有以下這些

   user='Username'

   passwd='Password'

   host='Ip_Address'

   db='dbname' #默認操作哪個db

   port='Port_number'

   connect_timeout='連接超時時間'

   compress:實現(xiàn)壓縮后進行數(shù)據(jù)傳輸

  connect.stat():查看連接狀態(tài)

  connect.ping():測試正在連接的mysql服務(wù)器是否在線,不在線則嘗試去重新連接

  connect.commit():提交當前事務(wù)

  connect.rollback():回滾事務(wù)

  connect.autocommit(self,on):設(shè)置自動提交事務(wù)功能,參數(shù)值為1時開啟此功能,值為0時關(guān)閉此功能

  connect.thread_id():獲取線程號

  connect.shutdown():關(guān)閉mysql服務(wù)(前提是連接的用戶有權(quán)限關(guān)閉mysql服務(wù))

  connect.cursor(self, cursorclass=None):通過connect連接對象創(chuàng)建游標對象

  connect.select_db('dbname'):選擇一個數(shù)據(jù)庫進行操作

  cursor.execute(self, query, args=None):通過cursor游標對象執(zhí)行單條語句

  cursor.executemany(self, query, args):通過cursor游標對象執(zhí)行多條語句

   這里的參數(shù)args必須是一個元組序列類型,可以是元組內(nèi)包含元組,也可以是列表內(nèi)包含元組

  cursor.fetchone(self):通過cursor游標對象取出執(zhí)行查詢語句后的單條記錄。

   fetchone方法一次只能取一條記錄;

   可以通過遍歷循環(huán)的方式取得所有記錄;

   默認只能從上往下查,無法從下往上查;

  cursor.fetchmany(self, size=None):通過cursor游標對象取出查詢語句后的多條記錄

   size參數(shù)用來設(shè)置取出多少條記錄

   如:cursor.fetchmany(10)表示取出10條記錄

  cursor.fetchall(self):通過cursor游標對象取出執(zhí)行查詢語句后的所有記錄

  cursor.scroll(self, value, mode='relative'):控制數(shù)據(jù)指針的位置

   value參數(shù):

    用來設(shè)置偏移位,也就是移動多少位置

   mode參數(shù):

    默認是relative,也就是從當前位置開始偏移;

    當設(shè)置為absolute時表示絕對位置,從頭開始偏移

    如:cursor.scroll(0,absolute)表示將指針移動到頭部,從頭開始,移動0位

 接下來我們來演示一下用MySQLdb模塊實現(xiàn)mysql的增刪改查功能

 在這里我們要操作的數(shù)據(jù)庫名為aproduct,在aproduct庫中有張表test2,查詢出來內(nèi)容如下:

mysql> select * from test2; +-------+------+---------+------+ | name  | age  | job     | city | +-------+------+---------+------+ | tom   |   30 | teacher | SH   | | jerry |   25 | doctor  | WC   | +-------+------+---------+------+ 2 rows in set (0.09 sec)

 創(chuàng)建一個連接對象:

conn = MySQLdb.connect(user='roo',passwd='abc123!',host='127.0.0.1')

 通過connect連接對象創(chuàng)建游標對象:

cur = conn.cursor()

 通過以上兩個步驟就能正常連接到一個數(shù)據(jù)庫,接下來就是操作數(shù)據(jù)庫了。

 一般來說通過python來操作數(shù)據(jù)庫指的是對數(shù)據(jù)庫進行增、刪、改、查,至于創(chuàng)建數(shù)據(jù)庫最好是在數(shù)據(jù)庫命令行界面下操作。

 假定我們要ss_product這個庫進行操作,在命令行下我們需要用到use ss_product,但在python下是沒有use命令的,但我們可以通過select_db來實現(xiàn)這個功能:

conn.select_db('aproduct')

 通過cursor游標對象執(zhí)行sql語句:

  在前面我們看到,test2這張表有四個字段,接下來我們給插入一條記錄。

cur.execute("insert into test2(name,age,job,city) value('sean',28,'Engineer','SH')")

 我們在命令行下看看數(shù)據(jù)是否插入成功:

mysql> select * from test2; +-------+------+----------+------+ | name  | age  | job      | city | +-------+------+----------+------+ | tom   |   30 | teacher  | SH   | | jerry |   25 | doctor   | WC   | | sean  |   28 | Engineer | SH   | +-------+------+----------+------+ 3 rows in set (0.00 sec)

 由此可見,數(shù)據(jù)已經(jīng)插入成功了,但這樣插入數(shù)據(jù)會很麻煩。

 因為數(shù)據(jù)不可能是固定的,不可能每次插入數(shù)據(jù)都去修改SQL語句,所以我們通常將sql語句放到一個變量名中。

sqli = "insert into test2(name,age,job,city) value(%s,%s,%s,%s)" cur.execute(sqli,('abc',30,'actor','WH'))

 在命令行里看看是否插入成功:

mysql> select * from test2; +-------+------+----------+------+ | name  | age  | job      | city | +-------+------+----------+------+ | tom   |   30 | teacher  | SH   | | jerry |   25 | doctor   | WC   | | sean  |   28 | Engineer | SH   | | abc   |   30 | actor    | WH   | +-------+------+----------+------+ 4 rows in set (0.00 sec)

 可以看到,數(shù)據(jù)已經(jīng)插入成功。這樣的方式比之前面一種寫死數(shù)據(jù)就要靈活得多了。

 但是這樣只能一次插入一條數(shù)據(jù),要想插入多條數(shù)據(jù)則需要像下面這樣操作:

sqlim = "insert into test2(name,age,job,city) values(%s,%s,%s,%s)"

 當要插入多條數(shù)據(jù)時,通常把所有的數(shù)據(jù)放到values下,雖然不知道要插入多少數(shù)據(jù),但是字段是固定的

 在本例中是4個字段,所以values內(nèi)只需要我們給四個%s占位即可,這里只能使用%s進行占位。

 游標對象(cursor)的execute方法只能同時插入一條數(shù)據(jù),想要同時插入多條數(shù)據(jù)則要使用executemany方法:

cur.executemany(sqlim,[('a123',40,'teacher','NC'),('a456',34,'Engineer','BJ'),('lisi',25,'worker','GZ')])

 注意:sqlim后面的參數(shù)必須是一個元組序列類型,可以是元組內(nèi)包含元組,也可以是列表內(nèi)包含元組。

 在命令行下看看數(shù)據(jù)庫表的內(nèi)容:

mysql> select * from test2; +-------+------+----------+------+ | name  | age  | job      | city | +-------+------+----------+------+ | tom   |   30 | teacher  | SH   | | jerry |   25 | doctor   | WC   | | sean  |   28 | Engineer | SH   | | abc   |   30 | actor    | WH   | | a123  |   40 | teacher  | NC   | | a456  |   34 | Engineer | BJ   | | lisi  |   25 | worker   | GZ   | +-------+------+----------+------+ 7 rows in set (0.00 sec)

 接下來我們用同樣的命令來嘗試下刪除”lisi“這條記錄:

sqld = "delete from test2 where name='lisi'" cur.execute(sqld)

 看看數(shù)據(jù)庫結(jié)果:

mysql> select * from test2; +-------+------+----------+------+ | name  | age  | job      | city | +-------+------+----------+------+ | tom   |   30 | teacher  | SH   | | jerry |   25 | doctor   | WC   | | sean  |   28 | Engineer | SH   | | abc   |   30 | actor    | WH   | | a123  |   40 | teacher  | NC   | | a456  |   34 | Engineer | BJ   | +-------+------+----------+------+ 6 rows in set (0.00 sec)

 接下來我們將名字叫abc的這條記錄中的年齡給改成35:

sqlu = "update test2 set age=35 where name='abc'" cur.execute(sqlu)

 進數(shù)據(jù)庫看看結(jié)果:

mysql> select * from test2; +-------+------+----------+------+ | name  | age  | job      | city | +-------+------+----------+------+ | tom   |   30 | teacher  | SH   | | jerry |   25 | doctor   | WC   | | sean  |   28 | Engineer | SH   | | abc   |   35 | actor    | WH   | | a123  |   40 | teacher  | NC   | | a456  |   34 | Engineer | BJ   | +-------+------+----------+------+ 6 rows in set (0.00 sec)

 接下來看看怎么查詢:

  我們用sql語句在命令行中查詢時會返回一張表,其類型如上例的結(jié)果所示。

  但在python中MySQLdb模塊是無法實現(xiàn)打印出這種格式的,此時我們需要通過另一種方法來實現(xiàn)查詢功能。

sqls = "select * from test2" cur.execute(sqls) cur.fetchone()      #查詢一條記錄 cur.fetchmany(6)    #查詢6條記錄

 MySQLdb模塊中的查詢是通過游標來控制的,我們可以通過cursor游標對象的scroll方法來控制游標。

 當sql語句執(zhí)行完畢以后,我們需要斷開數(shù)據(jù)庫連接,分為以下幾個步驟:

cur.close()     #斷開游標 conn.close()    #斷開數(shù)據(jù)庫

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:python之MySQLdb模塊-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://bm7419.com/article40/cesiho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)外貿(mào)建站、響應(yīng)式網(wǎng)站、云服務(wù)器虛擬主機、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司