標籤:
Python其實是可以操縱資料庫的,想想如果能在python裡寫SQL語句,從而直接達到操縱資料庫的目的,how cool!
Python的標準資料庫介面為Python DB-API,針對不同的資料庫要安裝不同的模組,其中,MySQLdb就是用於連結MySQL資料庫的介面。
安裝MySQLdb,可以在 http://sourceforge.net/projects/mysql-python 上找到安裝包,下載安裝即可,無需多餘的設定。
使用流程大致如下:
- 匯入MySQLdb模組
- 擷取與資料庫的串連
- 執行SQL語句,同時重新整理資料庫
- 關閉資料庫連接
接下裡分開記錄資料庫連接、建立資料庫表、資料庫插入操作、查詢操作、更新操作、刪除操作和錯誤處理
- 資料庫連接
# 匯入模組 import MySQLdb # 資料庫連接 db = MySQLdb.connect(host= "localhost", user=‘****‘, passwd=‘****‘, db=‘****‘) |
資料庫連接比較簡單,格式也都是固定的,注意在串連前,確保使用者擁有操縱某個資料庫的許可權
- 建立資料庫表
# -*- 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中查看:
沒有問題!
- 資料庫插入操作
# -*- 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() |
結果如下:
- 資料庫查詢操作
# -*- 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,遊標的位置就會發生改變,結果也看得出來,不過這也正是遊標的意義所在了
- 資料庫更新操作
# -*- 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()
- 資料庫刪除操作
# -*- 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學習筆記(一)