python 通過DB-API規范了它所支持的不同的數據庫,使得不同的數據庫可以使用統一的接口來訪問和操作。
滿足DB-API規范的的模塊必須提供以下屬性:
屬性名 描述
apilevel DB-API 模塊兼容的DB-API 版本號
threadsafety 線程安全級別
paramstyle 該模塊支持的SQL語句參數風格
connect() 連接函數(最常用)
其中 threadsafety是一個整數,取值如下:
0:不支持線程安全,多個線程不能共享此模塊
1:初級線程安全支持,多個線程可以共享該模塊,但不能共享連接
2:中級線程安全支持,多個線程可以共享模塊和連接,但不能共享游標
3:完全線程安全支持,線程可以共享模塊,連接,游標
connect() 生成一個connect對象,我們通過這個對象訪問數據庫,符合標准的模塊都會實現connect
MySQLdb 是封裝mysql訪問和操作的模塊。
connect() 的規范參數
參數 描述
user Username
password Password
host Hostname
database Database name
dsn Data source name
不是所有的接口程序都是嚴格按照規范實現的. MySQLdb 就使用了 db 參數而不是規范推薦的 database 參數來表示要訪問的數據庫.
例:MySQLdb.connect(host='dbserv', db='inv', user='smith')
連接對象 connect
要與數據庫進行通信, 必須先和數據庫建立連接. 連接對象處理命令如何送往服務器, 以及如何從服務器接收數據等基礎功能. 連接成功(或一個連接池)后你就能夠向數據庫服務器發送請求,得到響應.
連接對象沒有必須定義的數據屬性。
連接對象方法
Method Name Description
close() 關閉數據庫連接
commit() 提交當前事務
rollback() 取消當前事務
cursor() 使用這個連接創建並返回一個游標或類游標的對象
errorhandler (cxn, cur,errcls, errval)
游標對象
一個游標允許用戶執行數據庫命令和得到查詢結果. 一個 Python DB-API 游標對象總是扮演游標的角色, 無論數據庫是否真正支持游標.
游標對象的屬性
對象屬性 描述
arraysize 使用fechmany()方法一次取出多少條記錄, 默認值為 1
connectionn 創建此游標對象的連接(可選)
description 返回游標活動狀態( 一個包含七個元素的元組): (name, type_code,display_size, internal_ size, precision, scale, null_ok); 只有 name和 type_code 是必須提供的.
lastrowid 返回最后更新行的 id (可選), 如果數據庫不支持行 id, 默認返回 None)
rowcount 最后一次 execute() 操作返回或影響的行數.
callproc(func[,args]) 調用一個存儲過程
close() 關閉游標對象
execute(op[,args]) 執行一個數據庫查詢或命令
executemany(op,args) 類似 execute() 和 map() 的結合, 為給定的每一個參數准備並執行一個數據庫查詢/命令
游標對象屬性(續)
對象屬性 描述
fetchone() 得到結果集的下一行
fetchmany([size=cursor.arraysize]) 得到結果集的下幾行 (幾 = size)
fetchall() 返回結果集中剩下的所有行
__iter__() 創建一個迭代對象 (可選; 參閱 next())
messages 游標執行后數據庫返回的信息列表 (元組集合) (可選)
next() 使用迭代對象得到結果集的下一行(可選; 類似 fetchone(), 參閱 __iter__())
nextset() 移到下一個結果集 (如果支持的話)
rownumber 當前結果集中游標的索引 (以行為單位, 從0 開始) (可選)
setinput- sizes(sizes) 設置輸入最大值 (必須有, 但具體實現是可選的)
setoutput- size(size[,col]) 設置大列的緩沖區大寫(必須有, 但具體實現是可選的)
給出 MySQLdb 一般的操作流程
1,創建connect
sample:
conn = MySQLdb.connect(host = '',user = '' ,port = 3306, charset = 'utf8')
charset 要設置,不然處理中文會亂碼。而且當前python 文件也要存成utf8。
2,獲取游標對象 以便對數據庫訪問和操作
sample:
cur = conn.cursor()
3,選擇一個database
sample:
conn.select_db('GameDB')
4,指向sql語句 通過游標對象
sample:
cur.execute("select * from CHARBASE where NAME like %s",('%%%s%%' %name))
5,獲取結果 ,返回的是元組集
sample:
result = cur.fetchone()
6,處理結果
7,提交事務
sample:
conn.commit()
8 ,關閉游標和連接
cur.close()
conn.close()