Python PEP249簡介
Python PEP249
在專案開發中,資料庫應用必不可少。PEP 249 即定義了使用Python訪問資料庫的一組通用規範,統一了不同資料庫系統的訪問模型。該規 範使得資料庫訪問模組更易於理解,在提供廣泛的資料庫連線支援的同時,也增強了應用在 不同資料庫之間的可移植性。
在Python Database API 2.0規範中,定義了API介面的各個部分,如模組介面,連線物件, 遊標物件,型別物件和構造器,DB API的可選擴充套件以及可選的錯誤處理機制等。
標準模組介面
根據PEP 249規範,做了一個簡單的示意圖,根據不同型別做了簡單的劃分,並不一定與 Python物件一一對應。
1.模組介面
Module Interface Python程式碼與資料庫互動的模組介面,必須提供獲取資料庫連線的構造方法。
通過呼叫connect(parameters.. )即可返回資料庫連線物件Connection Object,
- connect(parameters… ):獲取資料庫連線。其中parameters為資料來源、使用者、密碼、數 據庫等,根據不同資料庫可選不同引數。
2.資料庫連線物件
Connection Object 資料庫連線物件主要提供獲取資料庫遊標物件、並提交/回滾事務的方法,以及關閉資料庫 連線。
- close():關閉資料庫連線
- commit():提交事務
- rollback():回滾事務
- cursor():獲取遊標物件,操作資料庫,如執行DML操作,呼叫儲存過程等
3.全域性常量
Gobals Constants 定義一些DB API相關的全域性常量,在標準介面中,主要如下:
- apilevel:當前DB API版本,如”1.0”,或”2.0”
-
threadsafety:整型常量,定義支援的執行緒安全型別,主要是是否可以線上程之間共享模組、連線物件以及遊標物件。
- 0 不可共享該模組
- 1 可共享該模組,但不能共享連線物件
- 2 可共享該模組和連線物件
- 3 可共享該模組、連線物件和遊標獨享
- paramstyle:介面引數佔位符所支援的樣式。因易讀性和靈活性,推薦使用numeric,named,pyformat
- qmark 問號符樣式,如 …WHERE name=?
- numeric 數字序號樣式,如 …WHERE name=:1
- named 命名引數樣式,如 …WHERE name=:name
- format ANSI C語言printf格式化編碼樣式如 e.g. …WHERE name=%s
- pyformat Python擴充套件編碼樣式如 …WHERE name=%(name)s
4.異常體系
Exceptions 異常體系主要用於定義DB API相關的異常,包括警告,錯誤,資料相關的異常,介面相關的 異常等等。
- Warning :資料在執行插入操作時被截斷,等等
- Error :這裡提到的除 Warning 外的所有異常的基類
- InterfaceError : 資料庫介面而非資料庫本身故障
- DatabaseError : 嚴格意義上的資料庫問題
- DataError : 包含如下結果資料的問題除數為 0,值超出範圍等
- OperationalError : 與程式設計人員無關的資料庫錯誤:連線丟失、記憶體分配錯誤、事務處理錯誤等
- IntegrityError : 資料庫的關係完整性受到了影響,例如,外來鍵約束失敗
- InternalError : 資料庫遇到內部錯誤,例如,遊標無效、事務不同步
- ProgrammingError : 未找到表、SQL 語句中的語法錯誤、指定引數的數量錯誤等
- NotSupportedError : 呼叫的 API 部件並不存在
5.遊標物件
Cursor Object 遊標物件代表資料庫中的遊標,用於指示抓取資料操作的上下文。主要提供執行SQL語句、 呼叫儲存過程、獲取查詢結果等方法。
- description:資料庫列型別和值的描述資訊
- rowcount:回返結果的行數統計資訊,如SELECT,UPDATE,CALLPROC等
- callproc(procname,[, parameters]):呼叫儲存過程,需要資料庫支援
- close():關閉當前遊標
- execute(operation[, parameters]):執行資料庫操作,SQL語句或者資料庫命令
- executemany(operation, seq_of_params):用於批量操作,如批量更新
- fetchone():獲取查詢結果集中的下一條記錄
- fetchmany(size):獲取指定數量的記錄
- fetchall():獲取結構集的所有記錄
- arraysize:指定使用fetchmany()獲取的行數,預設為1
- setinputsizes(sizes):設定在呼叫
execute*()
方法時分配的記憶體區域大小 - setoutputsize(sizes):設定列緩衝區大小,對大資料列入LONGS,BLOBS尤其有用
6.資料型別和構造器
Type and Constructor
1)Type Type定義了Python的資料型別和資料庫中表列型別的轉換和對應關係。
- STRING: 對應資料庫中基於字串的資料型別,如char,varchar
- BINARY: 對應資料庫中的二進位制型別,如long, row, blob
- NUMBER: 對應資料庫中的數字型別,如number
- DATETIME: 對應資料庫中的時間型別,如date, time
- ROWID:對應資料庫中的row id
- None:對應資料庫中的NULL
2)Constructor
Constructor是一組用於構造特殊資料型別的構造器,可以通過指定引數構造並返回預期對 象。
- Date(year, month, day):構造日期物件
- Time(hour, minute, second):構造時間物件
- Timestamp(year, month, day, hour, minute, second):構造時間戳物件
- DateFromTicks(ticks):通過從計算機計時開始經過的秒數構造日期物件;即從1970年1月1日0時0分0秒起計算
- TimeFromTicks(ticks):同上,用於構造時間物件
- TimestampFromTicks(ticks):同上,用於構造時間戳物件
- Binary(string):從字串構造二進位制物件 擴充套件模組介面
擴充套件模組可以參考官方文件,這裡暫不提及。