教你輕鬆學會Python操作數據庫

每種高級語言都具有連接數據庫的功能,這是網絡編程的基礎。每當一個應用誕生時,都少不了的要存儲數據。數據庫便成了主角!

Python官方提供的連接數據庫的API很有語義化,學起來也十分容易理解。接下來,我就總結一下有關Python數據庫API的一些知識:包含與數據庫的連接、遊標對象、異常、完整示例。

首先,在學習操作數據庫之前,要搞明白的幾件事:你要操作數據庫就要引入API模塊,首先要連通數據庫,接着要具有操作數據庫的對象,這樣你才能去操作數據庫,操作完畢,關閉與數據庫的連接。

這個順序很容易理解,也是操作數據庫時必要的順序。當然,操作數據庫時 的增刪改查就是與數據庫相關的內容了,在這裏我只傳授一下操作數據庫。
一、引入API模塊
引入模塊需要根據你選用的數據庫,比如MySQL、Microsoft SQL Server 2000、Oracle。不同類型的數據庫需要引入不同的模塊,一般數據庫引擎都作爲服務器程序運行,所以在此做介紹我就選一個比較小型的SQLite數據庫引擎,不需要作爲獨立的服務器運行,直接用本地文件即可。這裏我以SQLite作爲示例。
其實無論使用哪種數據庫,即使是本地的存儲也好,它們原理都是相同的。

import sqlite3          #SQLite
import pymssql			#sql server
import MySQLdb          #mysql

二、連接數據庫、生成遊標
要想操作數據庫,第一步就是將你的程序與數據庫進行連接。Python給的連接函數很具有語義化——connect。這個函數需要接受多個參數,具體的參數是什麼取決於你所選用的數據庫。在這裏,我就列舉一些:

參數名			描述			是否可選
dsn				數據源名稱		否
user			用戶名			是
password		用戶密碼			是
host			主機名			是
database		數據庫名稱		是

生成連接對象:

conn = sqlite3.connect('C:\Users\HP\Desktop\database.db')  #Sqlite連接方式,本地存儲路徑,db文件如果不存在,系統會自動創建
conn = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )  #mysql的連接方式

獲取遊標對象:
對於初學者可能有點懵懂,遊標到底是個啥東西?其實啊,遊標就是一個操作數據庫的對象,需要用連接對象獲取遊標對象。
這時候,不得不寫兩個連接對象必要的方法:

方法名				描述
cursor()			返回連接的遊標對象
close()				關閉連接對象,關閉後,遊標也將不可使用
cur = conn.cursor()            # 使用cursor()方法獲取操作遊標

三、操作數據庫:
萬事俱備,只欠東風了。在進行前面的幾個簡單步驟之後,我們已經獲取到了遊標對象,操作數據庫,便是通過遊標對象來進行的。
但是問題又來了,如何通過遊標對象來執行SQL代碼呢?
別急,問題不大,官方肯定給的有遊標對象的一些方法啦:

方法名						描述
execute(oper[,params])		執行一個SQL操作,可指定參數
executemany(oper,pseq)		執行指定的SQL操作多次
fetchone()					以序列的方式取回查詢結果中的下一行,如果沒有更多的行,就返回None
fetchmany([size])			取回查詢結果中的多行,其中參數size的默認值爲arraysize
fetchall()					以序列的序列方式取回餘下的所有行
nextset()					跳到下一個結果集
setinputsizes(sizes)		用於爲參數預定義內存區域
setoutputsize(size[,col])	爲取回大量數據而設置緩衝區長度
callproc(name[,params])		使用指定的參數調用指定的數據庫過程
close()						關閉遊標

遊標對象的屬性:

名稱				描述
description			由結果列描述組成的序列(只讀)
rowcount			結果包含的行數(只讀)
arraysize			fetchmany返回的行數,默認爲1

操作數據庫示例:

#方式一: 使用execute方法執行SQL語句
cur.execute("DROP TABLE IF EXISTS EMPLOYEE")


#方式二:先寫好一個sql語句體,再用execute方法執行該語句體
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cur.execute(sql)

獲取數據:在上面示例代碼中,我們通過遊標對象執行了SQL語句,接着要獲取執行的結果。

# 使用 fetchone() 方法獲取一條數據
data = cur.fetchone()

關閉數據庫連接:

# 關閉數據庫連接
conn.close()

四、異常
在操作數據庫時,也可能會有一些異常,在這裏我也稍微提一下,給一些示例:

異常					超類				描述
StandardError						所有異常的超類
Warning				StandardError	發生非致命問題時引發
Error				StandardError	所有錯誤條件的超類
InterfaceError		Error			與接口(不是數據庫)相關的錯誤
DatabaseError		Error			與數據庫相關的錯誤的超類
DataError			DatabaseError	與數據庫相關的問題,如值不在合法的範圍內
OperationalError	DatabaseError	數據庫操作內部錯誤
IntegrityError		DatabaseError	關係完整性遭到破壞,如鍵未通過檢查
ProgrammingError	DatabaseError	用戶編程錯誤,如未找到數據庫表
NotSupportedError	DatabaseError	請求不支持的功能

五、完整的代碼示例

這是一個mysql的示例,查看數據庫版本的一個簡單示例。

import MySQLdb

# 打開數據庫連接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法獲取操作遊標 
cursor = db.cursor()

# 使用execute方法執行SQL語句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法獲取一條數據
data = cursor.fetchone()

print "Database version : %s " % data

# 關閉數據庫連接
db.close()

到這裏,你有沒有對高級語言操作數據庫這塊豁然開朗呢?如果對你有用就點個贊吧,哈哈

有疑問或者我寫的有不足之處,可在下方留言哦~

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