亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python之MySQLdb模塊

發布時間:2020-05-29 08:24:04 來源:網絡 閱讀:3272 作者:忘情OK 欄目:數據庫

防偽碼:忘情公子著


  MySQLdb是用來通過python控制mysql數據庫的一個模塊。

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

    1、連接數據庫;

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

    3、斷開數據庫連接

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

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

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

  MySQLdb模塊在其內部提供了以下幾個子模塊:

    connections:專門用來建立連接

    constants(package)

    converters:實現將python中的字符串轉換成mysql可以處理的數據類型

    cursors:游標。基于游標發送sql語句,獲取執行結果

    release

    times

  

  MySQLdb模塊的常用方法:

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

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

      user='Username'

      passwd='Password'

      host='Ip_Address'

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

      port='Port_number'

      connect_timeout='連接超時時間'

      compress:實現壓縮后進行數據傳輸


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

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

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

    connect.rollback():回滾事務

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

    connect.thread_id():獲取線程號

    connect.shutdown():關閉mysql服務(前提是連接的用戶有權限關閉mysql服務)

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

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

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

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

      這里的參數args必須是一個元組序列類型,可以是元組內包含元組,也可以是列表內包含元組

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

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

      可以通過遍歷循環的方式取得所有記錄;

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

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

      size參數用來設置取出多少條記錄

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

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

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

      value參數:

        用來設置偏移位,也就是移動多少位置

      mode參數:

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

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

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


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

  在這里我們要操作的數據庫名為aproduct,在aproduct庫中有張表test2,查詢出來內容如下:

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

  創建一個連接對象:

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

  通過connect連接對象創建游標對象:

cur = conn.cursor()

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

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

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

conn.select_db('aproduct')

  通過cursor游標對象執行sql語句:

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

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

  我們在命令行下看看數據是否插入成功:

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)

  由此可見,數據已經插入成功了,但這樣插入數據會很麻煩。

  因為數據不可能是固定的,不可能每次插入數據都去修改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)

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

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

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

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

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

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

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

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

  在命令行下看看數據庫表的內容:

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)

  看看數據庫結果:

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)

  進數據庫看看結果:

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語句在命令行中查詢時會返回一張表,其類型如上例的結果所示。

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

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

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

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

cur.close()     #斷開游標
conn.close()    #斷開數據庫
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平陆县| 江安县| 资源县| 佛学| 房山区| 苏尼特左旗| 抚远县| 柏乡县| 兴文县| 垦利县| 安西县| 漯河市| 北宁市| 鹤壁市| 西乌| 三河市| 灌阳县| 米泉市| 曲周县| 象山县| 柳林县| 龙江县| 库伦旗| 兴安盟| 荃湾区| 稻城县| 昌宁县| 清丰县| 公主岭市| 怀柔区| 定州市| 马关县| 涟源市| 隆安县| 林口县| 和田市| 邵阳市| 阳原县| 双峰县| 隆德县| 芜湖县|