MySQLdb 是用於Python連接Mysql數據庫的接口。
安裝MySQLdb
[root@ju bottle]# yum install MySQL-python –y
如果使用編譯安裝請到這裏下載安裝包https://pypi.python.org/pypi/MySQL-python並執行以下命令
[root@ju bottle]# gunzip MySQL-python-1.2.3.tar.gz [root@ju bottle]# tar xf MySQL-python-1.2.3.tar [root@ju bottle]# cd MySQL-python-1.2.3 [root@ju bottle]# python setup.py build [root@ju bottle]# python setup.py install
數據庫連接
直接上代碼:
[root@ju bottle]# cat linkmysql.py #!/usr/bin/env python #coding=utf-8 import MySQLdb db =MySQLdb.connect("localhost","root","123","mytestdb") #打開數據庫連接 cursor = db.cursor() #使用cursor()方法獲取操作遊標 cursor.execute("SELECTVERSION()") #使用execute方法執行SQL語句 data = cursor.fetchone() #使用fetchone()方法獲取一條數據。 print "Database version : %s " %data db.close() #關閉數據庫連接
創建數據庫表
[root@ju bottle]# cat create_table.py #!/usr/bin/env python #encoding=utf-8 import MySQLdb db =MySQLdb.connect("localhost","root","123","mytestdb") cursor = db.cursor() cursor.execute("DROP TABLE IF EXISTSMYTABLE") #如果MYTABLE表已經存在則使用execute()方法刪除。 sql = """CREATE TABLE MYTABLE( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) db.close()
數據庫插入操作
[root@ju bottle]# cat insert.py #!/usr/bin/env python #encoding=utf-8 import MySQLdb db =MySQLdb.connect("localhost","root","123","mytestdb") cursor = db.cursor() sql = """INSERT INTOMYTABLE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" #上述sql語句也可以寫成以下形式。 #sql = "INSERT INTOMYTABLE(FIRST_NAME, \ # LAST_NAME, AGE, SEX, INCOME) \ # VALUES ('%s', '%s', '%d', '%c', '%d' )" % \ # ('Mac', 'Mohan', 20, 'M', 2000) try: cursor.execute(sql) db.commit() #提交到數據庫執行 except: db.rollback() #如果執行錯誤則回滾 cursor.execute(sql) db.close()
數據庫查詢操作
Python查詢Mysql使用 fetchone()方法獲取單條數據, 使用fetchall() 方法獲取多條數據。
fetchone(): 該方法獲取下一個查詢結果集。結果集是一個對象
fetchall():接收全部的返回結果行.
rowcount: 這是一個只讀屬性,並返回執行execute()方法後影響的行數。
[root@ju bottle]# cat query.py #!/usr/bin/env python #encoding=utf-8 import MySQLdb db =MySQLdb.connect("localhost","root","123","mytestdb") cursor = db.cursor() sql = "SELECT * FROM MYTABLE WHEREINCOME > '%d'" % (1000) try: cursor.execute(sql) results = cursor.fetchall() #獲取所有記錄列表 for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印結果 print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \ (fname, lname, age, sex, income ) except: print "Error: unable to fecth data" cursor.execute(sql) db.close()
數據庫更新操作
[root@ju bottle]# cat update.py #!/usr/bin/env python #encoding=utf-8 import MySQLdb db =MySQLdb.connect("localhost","root","123","mytestdb") cursor = db.cursor() sql = "UPDATE MYTABLE SET LAST_NAME ='XIAOMING' WHERE INCOME = '%s'" % ('2000') try: cursor.execute(sql) db.commit() except: db.rollback() cursor.execute(sql) db.close()
執行事務
事務機制可以確保數據一致性。
事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱爲ACID特性。
原子性(atomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要麼都做,要麼都不做。
一致性(consistency)。事務必須是使數據庫從一個一致性狀態變到另一個一致性狀態。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執行不能被其他事務干擾。即一個事務內部的操作及使用的數據對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。
持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
Python DB API 2.0 的事務提供了兩個方法 commit 和 rollback。
這篇博客跟bottle框架本身關係不大,但是操作數據庫又是web開發必不可少的,所以就跟bottle放到一起了。