1. 程式人生 > >python的Pony ORM框架總結

python的Pony ORM框架總結

最近學校裡辦了python興趣班,剛學完python的基礎語法就講了這個Pony框架,以下是我上課記錄的某些關鍵點的筆記

Python 2提供了兩種字串型別 - str(位元組字串)和unicode(unicode字串),而在Python 3中,str型別表示unicode字串,並且剛剛刪除了unicode。
從Pony Release 0.6開始,添加了對Python 3的支援,而不是unicode和LongUnicode,我們建議分別使用str和LongStr型別。
LongStr和LongUnicode作為CLOB儲存在資料庫中。
緩衝區和位元組型別在資料庫中儲存為二進位制(BLOB)型別也就是二進位制大物件長度為兩個G。

如果兩個實體具有一對一關係,則通常意味著它們可以組合成單個實體。
如果您的資料圖有很多一對一的關係,那麼它可能表示您需要重新考慮實體定義。

在括號中,在屬性型別之後,您可以指定屬性選項。
每個屬性可以是以下型別之一:
Required 必須的
Optional 可選的
PrimaryKey 主鍵
Set 集合
SQLite的Python驅動程式不會在SELECT語句上啟動事務。它只在可以修改資料庫的語句上開始事務:INSERT,UPDATE,DELETE。其他驅動程式在任何SQL語句上啟動事務,包括SELECT。

Pony在幾個階段快取資料以提高效能。它快取:
生成器表示式轉換的結果。如果在程式中多次使用相同的生成器表示式查詢,則它將僅轉換為SQL一次。此快取對整個程式是全域性的,不僅適用於單個數據庫會話。
從資料庫建立或載入的物件。Pony將這些物件儲存在Identity Map中。在離開db_session()作用域或事務回滾時清除此快取記憶體。
查詢結果。如果再次使用相同的引數呼叫相同的查詢,Pony將從快取返回查詢結果。一旦任何實體例項發生更改,就會清除此快取。在離開db_session()作用域或事務回滾時清除此快取記憶體。

悲觀鎖
假設一定會出現執行緒衝突的執行緒鎖
樂觀鎖
假設不會出現衝突的執行緒的鎖,但是為了防止執行緒的鎖的衝突,在儲存的時檢查是否修改

事務的傳播行為

如果兩個銀行分行將嘗試同時將全部金額轉移到不同的帳戶,則將執行這兩個操作。
每個函式都將通過驗證,最後一個事務將覆蓋另一個事務的結果。
這種異常稱為“丟失更新”。

隔離是一種屬性,用於定義一個事務所做的更改何時對其他併發事務隔離級別可見。ANSI SQL標準定義了四個隔離級別:
READ UNCOMMITTED - 最低隔離級別
READ COMMITTED
REPEATABLE READ
SERIALIZABLE -最高隔離級別
spring 有五個隔離級別,一般的資料庫只有四個隔離級別

Pony不會自動提交事務