Python+MySQL學習筆記(一)

來源:互聯網
上載者:User

標籤:

Python其實是可以操縱資料庫的,想想如果能在python裡寫SQL語句,從而直接達到操縱資料庫的目的,how cool!

Python的標準資料庫介面為Python DB-API,針對不同的資料庫要安裝不同的模組,其中,MySQLdb就是用於連結MySQL資料庫的介面。

安裝MySQLdb,可以在 http://sourceforge.net/projects/mysql-python 上找到安裝包,下載安裝即可,無需多餘的設定。

使用流程大致如下:

  1. 匯入MySQLdb模組
  2. 擷取與資料庫的串連
  3. 執行SQL語句,同時重新整理資料庫
  4. 關閉資料庫連接

接下裡分開記錄資料庫連接、建立資料庫表、資料庫插入操作、查詢操作、更新操作、刪除操作和錯誤處理

  1. 資料庫連接

     

    # 匯入模組

    import MySQLdb

    # 資料庫連接

    db = MySQLdb.connect(host= "localhost", user=‘****‘, passwd=‘****‘, db=‘****‘)

     

資料庫連接比較簡單,格式也都是固定的,注意在串連前,確保使用者擁有操縱某個資料庫的許可權

  1. 建立資料庫表

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = ‘localhost‘, user = ‘wpy‘, passwd = ‘2016‘, db = ‘testdb‘)

    # 擷取遊標

    cursor = db.cursor()

    # cursor的execute方法可以執行SQL

    # 如果表EMPLOYEE存在則刪除

    cursor.execute(‘DROP TABLE IF EXISTS EMPLOYEE‘)

     

    sql = ‘CREATE TABLE EMPLOYEE(\

    NAME VARCHAR(10) PRIMARY KEY,\

    AGE INT,\

    SEX VARCHAR(1))‘

    cursor.execute(sql)

    # 關閉遊標

    cursor.close()

    # 關閉資料庫連接

    db.close()

     

    在powershell中查看:

     

     

    沒有問題!

     

  2. 資料庫插入操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = ‘localhost‘, user = ‘wpy‘, passwd = ‘2016‘, db = ‘testdb‘)

    # 擷取遊標

    cursor = db.cursor()

     

    # 插入一條記錄

    sql = "INSERT INTO EMPLOYEE(NAME, AGE, SEX) VALUES (‘Simon‘, 20, ‘M‘)"

    try:

    cursor.execute(sql)

    # 一定要commit()一下資料庫才會被更新

    db.commit()

    except:

    db.rollback()

     

    # 插入多條記錄

    values = [(‘Lucy‘, 21, ‘W‘), (‘Tom‘, 19, ‘M‘)]

    # 必須是%s,且沒有引號,%d是不行的

    sql = "INSERT INTO EMPLOYEE(NAME, AGE, SEX) VALUES (%s, %s, %s)"

    try:

    cursor.executemany(sql, values)

    db.commit()

    except:

    db.rollback()

     

    # 關閉遊標

    cursor.close()

    # 關閉資料庫連接

    db.close()

     

    結果如下:

     

     

  3. 資料庫查詢操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = ‘localhost‘, user = ‘wpy‘, passwd = ‘2016‘, db = ‘testdb‘)

    # 擷取遊標

    cursor = db.cursor()

     

    # SQL查詢語句

    sql = "SELECT * FROM EMPLOYEE WHERE AGE >= ‘%d‘" % (20)

     

    try:

    cursor.execute(sql)

    # 擷取所有記錄

    rows = cursor.fetchall()

    for row in rows:

    print ‘Name:‘, row[0], ‘Age:‘, row[1], ‘Sex:‘, row[2]

    except:

    print ‘Error, return nothing.‘

    # 關閉遊標

    cursor.close()

    # 關閉資料庫連接

    db.close()

     

    結果如下:

     

    Cursor還有兩個方法,fetchone()和fetchmany(size=)

    fetchmany(size=)比較簡單,可以控制返回的行數

    fetchone()的意義在於逐行擷取,因為每使用一次fetch,遊標的位置就會發生改變,結果也看得出來,不過這也正是遊標的意義所在了

     

  4. 資料庫更新操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = ‘localhost‘, user = ‘wpy‘, passwd = ‘2016‘, db = ‘testdb‘)

    # 擷取遊標

    cursor = db.cursor()

     

    # SQL更新語句

    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE AGE >= ‘%d‘" % (20)

     

    try:

    cursor.execute(sql)

    db.commit()

    except:

    db.rollback()

    # 關閉遊標

    cursor.close()

    # 關閉資料庫連接

    db.close()

     

    資料庫更新操作還是比較簡單,注意別忘了db.commit()

  5. 資料庫刪除操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = ‘localhost‘, user = ‘wpy‘, passwd = ‘2016‘, db = ‘testdb‘)

    # 擷取遊標

    cursor = db.cursor()

     

    # SQL刪除語句

    sql = "DELETE FROM EMPLOYEE WHERE AGE < ‘%d‘" % (20)

     

    try:

    cursor.execute(sql)

    db.commit()

    except:

    db.rollback()

    # 關閉遊標

    cursor.close()

    # 關閉資料庫連接

    db.close()

     

    比較簡單,不多說

     

    總結:MySQLdb的文法還是比較簡單的,步驟也很單一,除了SQL不同之外,整體架構大體上沒有發生太大的改變。還是那句話,SQL是根本,只有掌握好SQL才能執行更為複雜的操作。

    其實MySQLdb的文法遠不止這些,不過這些就已經夠用,如果想深入學習,可以參考官方網站http://dev.mysql.com/doc/connector-python/en/

     

    參考資料:http://www.runoob.com/python/python-mysql.html

                   http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html

                   http://blog.csdn.net/lengyue318/article/details/7913427

Python+MySQL學習筆記(一)

聯繫我們

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