成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

python之MySQLdb模塊

防偽碼:忘情公子著

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、瑞安網(wǎng)站維護(hù)、網(wǎng)站推廣。

  MySQLdb是用來(lái)通過(guò)python控制mysql數(shù)據(jù)庫(kù)的一個(gè)模塊。

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

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

    2、操作數(shù)據(jù)庫(kù)(通過(guò)sql語(yǔ)句);

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

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

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

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

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

    connections:專門用來(lái)建立連接

    constants(package)

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

    cursors:游標(biāo)。基于游標(biāo)發(fā)送sql語(yǔ)句,獲取執(zhí)行結(jié)果

    release

    times

  

  MySQLdb模塊的常用方法:

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

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

      user='Username'

      passwd='Password'

      host='Ip_Address'

     db='dbname' #默認(rèn)操作哪個(gè)db

      port='Port_number'

      connect_timeout='連接超時(shí)時(shí)間'

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

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

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

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

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

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

    connect.thread_id():獲取線程號(hào)

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

    connect.cursor(self, cursorclass=None):通過(guò)connect連接對(duì)象創(chuàng)建游標(biāo)對(duì)象

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

    cursor.execute(self, query, args=None):通過(guò)cursor游標(biāo)對(duì)象執(zhí)行單條語(yǔ)句

    cursor.executemany(self, query, args):通過(guò)cursor游標(biāo)對(duì)象執(zhí)行多條語(yǔ)句

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

    cursor.fetchone(self):通過(guò)cursor游標(biāo)對(duì)象取出執(zhí)行查詢語(yǔ)句后的單條記錄。

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

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

      默認(rèn)只能從上往下查,無(wú)法從下往上查;

    cursor.fetchmany(self, size=None):通過(guò)cursor游標(biāo)對(duì)象取出查詢語(yǔ)句后的多條記錄

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

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

    cursor.fetchall(self):通過(guò)cursor游標(biāo)對(duì)象取出執(zhí)行查詢語(yǔ)句后的所有記錄

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

      value參數(shù):

        用來(lái)設(shè)置偏移位,也就是移動(dòng)多少位置

      mode參數(shù):

        默認(rèn)是relative,也就是從當(dāng)前位置開始偏移;

        當(dāng)設(shè)置為absolute時(shí)表示絕對(duì)位置,從頭開始偏移

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

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

  在這里我們要操作的數(shù)據(jù)庫(kù)名為aproduct,在aproduct庫(kù)中有張表test2,查詢出來(lái)內(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)建一個(gè)連接對(duì)象:

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

  通過(guò)connect連接對(duì)象創(chuàng)建游標(biāo)對(duì)象:

cur = conn.cursor()

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

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

  假定我們要ss_product這個(gè)庫(kù)進(jìn)行操作,在命令行下我們需要用到use ss_product,但在python下是沒有use命令的,但我們可以通過(guò)select_db來(lái)實(shí)現(xiàn)這個(gè)功能:

conn.select_db('aproduct')

  通過(guò)cursor游標(biāo)對(duì)象執(zhí)行sql語(yǔ)句:

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

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

  我們?cè)诿钚邢驴纯磾?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ù)會(huì)很麻煩。

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

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)"

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

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

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

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

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

  在命令行下看看數(shù)據(jù)庫(kù)表的內(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)

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

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

  看看數(shù)據(jù)庫(kù)結(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)

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

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

  進(jìn)數(shù)據(jù)庫(kù)看看結(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)

  接下來(lái)看看怎么查詢:

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

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

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

  MySQLdb模塊中的查詢是通過(guò)游標(biāo)來(lái)控制的,我們可以通過(guò)cursor游標(biāo)對(duì)象的scroll方法來(lái)控制游標(biāo)。

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

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

本文標(biāo)題:python之MySQLdb模塊
網(wǎng)址分享:http://jinyejixie.com/article36/pddpsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、、網(wǎng)站內(nèi)鏈動(dòng)態(tài)網(wǎng)站、定制開發(fā)、外貿(mào)網(wǎng)站建設(shè)

廣告

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

商城網(wǎng)站建設(shè)
卓尼县| 兴和县| 望谟县| 方山县| 东平县| 鄄城县| 绥芬河市| 龙海市| 额济纳旗| 泽州县| 康乐县| 霍邱县| 扎兰屯市| 区。| 自治县| 广水市| 建水县| 沙田区| 密山市| 永城市| 大渡口区| 闽清县| 法库县| 奉贤区| 卢氏县| 潮安县| 祥云县| 绥棱县| 安庆市| 旌德县| 阜新市| 湾仔区| 石门县| 沁阳市| 丰台区| 曲靖市| 襄樊市| 定兴县| 汨罗市| 合肥市| 名山县|