天天看點

python調用資料庫_python資料庫(mysql)操作

一、軟體環境

python環境預設安裝了sqlite3,如果需要使用sqlite3我們直接可以在python代碼子產品的頂部使用import sqlite3來導入該子產品。本篇文章我是記錄了python操作mysql資料庫,

由于我之前安裝的是wampserver,預設安裝了php、mysql和apache這3個環境,是以我沒有在單獨安裝mysql資料庫,隻是下載下傳了一個mysql管理工具Navicat for MySQL。在使用Navicat for MySQL連接配接本地mysql資料庫時,發生連接配接失敗問題,經過網上查詢得知是mysql服務沒有啟動,如何啟動mysql服務請看

mysql 和mysqld 的差別:

mysqld 是服務端程式

mysql是指令行用戶端程式

二、資料庫操作

python操作mysql資料庫,新增、修改和删除比較簡單,都是執行一個簡單的sql語句。查詢除了執行sql語句外還需要使用fetchone和fetchall來擷取資料條目

# -*- coding: UTF-8 -*-

__author__ = 'Administrator'

import MySQLdb

# 打開資料庫連接配接

db = MySQLdb.connect("localhost","root","123456","test" )

# 使用cursor()方法擷取操作遊标

cursor = db.cursor()

# 使用execute方法執行SQL語句

cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法擷取一條資料庫。

data = cursor.fetchone()

print "Database version :%s" % data

# 如果資料表已經存在使用 execute() 方法删除表。

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

# 建立資料表SQL語句

sql = """CREATE TABLE EMPLOYEE (FIRST_NAME CHAR(20) NOT NULL,LAST_NAME CHAR(20),AGE INT,SEX CHAR(1),INCOME FLOAT )"""

cursor.execute(sql)

# SQL 插入語句

sql = """INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, INCOME)VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""

try:

# 執行sql語句

cursor.execute(sql)

# 送出到資料庫執行

db.commit()

except:

# Rollback in case there is any error

db.rollback()

# SQL 查詢語句

sql = "SELECT * FROM EMPLOYEE\WHERE INCOME > '%d'" % (1000)

try:

# 執行SQL語句

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"

# 關閉資料庫連接配接

db.close()

三、事務

事務機制可以確定資料一緻性。

事務應該具有4個屬性:原子性、一緻性、隔離性、持久性。這四個屬性通常稱為ACID特性。原子性(atomicity)。一個事務是一個不可分割的工作機關,事務中包括的諸操作要麼都做,要麼都不做。

一緻性(consistency)。事務必須是使資料庫從一個一緻性狀态變到另一個一緻性狀态。一緻性與原子性是密切相關的。

隔離性(isolation)。一個事務的執行不能被其他事務幹擾。即一個事務内部的操作及使用的資料對并發的其他事務是隔離的,并發執行的各個事務之間不能互相幹擾。

持久性(durability)。持續性也稱永久性(permanence),指一個事務一旦送出,它對資料庫中資料的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。

Python DB API 2.0 的事務提供了兩個方法 commit 或 rollback。

# SQL删除記錄語句

sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)

try:

# 執行SQL語句

cursor.execute(sql)

# 向資料庫送出

db.commit()

except:

# 發生錯誤時復原

db.rollback()

對于支援事務的資料庫, 在Python資料庫程式設計中,當遊标建立之時,就自動開始了一個隐形的資料庫事務。commit()方法遊标的所有更新操作,rollback()方法復原目前遊标的所有操作。每一個方法都開始了一個新的事務。