bottle框架學習(八)之Mysql數據庫的操作

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放到一起了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章