1. 程式人生 > >Python PEP249簡介

Python PEP249簡介

Python PEP249

在專案開發中,資料庫應用必不可少。PEP 249 即定義了使用Python訪問資料庫的一組通用規範,統一了不同資料庫系統的訪問模型。該規 範使得資料庫訪問模組更易於理解,在提供廣泛的資料庫連線支援的同時,也增強了應用在 不同資料庫之間的可移植性。

在Python Database API 2.0規範中,定義了API介面的各個部分,如模組介面,連線物件, 遊標物件,型別物件和構造器,DB API的可選擴充套件以及可選的錯誤處理機制等。

標準模組介面

根據PEP 249規範,做了一個簡單的示意圖,根據不同型別做了簡單的劃分,並不一定與 Python物件一一對應。

pep249

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):從字串構造二進位制物件 擴充套件模組介面

擴充套件模組可以參考官方文件,這裡暫不提及。

參考