- Python 資料持久化教程
- Python 資料持久化 - 首頁
- Python 資料持久化 - 簡介
- Python 資料持久化 - 檔案 API
- 使用 os 模組處理檔案
- Python 資料持久化 - 物件序列化
- Python 資料持久化 - Pickle 模組
- Python 資料持久化 - Marshal 模組
- Python 資料持久化 - Shelve 模組
- Python 資料持久化 - dbm 包
- Python 資料持久化 - CSV 模組
- Python 資料持久化 - JSON 模組
- Python 資料持久化 - XML 解析器
- Python 資料持久化 - Plistlib 模組
- Python 資料持久化 - Sqlite3 模組
- Python 資料持久化 - SQLAlchemy
- Python 資料持久化 - PyMongo 模組
- Python 資料持久化 - Cassandra 驅動程式
- 資料持久化 - ZODB
- 資料持久化 - Openpyxl 模組
- Python 資料持久化資源
- Python 資料持久化 - 快速指南
- Python 資料持久化 - 有用資源
- Python 資料持久化 - 討論
資料持久化 - ZODB
ZODB (**Zope 物件資料庫**) 是用於儲存 Python 物件的資料庫。它符合 ACID 規範 - 這是 NoSQL 資料庫中沒有的功能。ZODB 也是開源的、水平可擴充套件的和無模式的,就像許多 NoSQL 資料庫一樣。但是,它不是分散式的,也不提供簡單的複製功能。它為 Python 物件提供了持久化機制。它是 Zope 應用程式伺服器的一部分,但也可以獨立使用。
ZODB 由 Zope 公司的 Jim Fulton 建立。它最初是一個簡單的持久化物件系統。其當前版本為 5.5.0,完全用 Python 編寫,使用 Python 內建物件持久化 (pickle) 的擴充套件版本。
ZODB 的一些主要功能包括:
- 事務
- 歷史記錄/撤銷
- 可插拔儲存
- 內建快取
- 多版本併發控制 (MVCC)
- 網路可擴充套件性
ZODB 是一個**分層**資料庫。在建立資料庫時會初始化一個根物件。根物件像 Python 字典一樣使用,並且可以包含其他物件(這些物件本身可以像字典一樣)。要將物件儲存到資料庫中,只需將其分配到其容器內的新的鍵即可。
ZODB 適用於資料具有層次結構並且讀取操作多於寫入操作的應用程式。ZODB 是 pickle 物件的擴充套件。因此,它只能透過 Python 指令碼進行處理。
要安裝最新版本的 ZODB,可以使用 pip 工具:
pip install zodb
以下依賴項也會被安裝:
- BTrees==4.6.1
- cffi==1.13.2
- persistent==4.5.1
- pycparser==2.19
- six==1.13.0
- transaction==2.4.0
ZODB 提供以下儲存選項:
FileStorage
這是預設選項。所有內容都儲存在一個大的 Data.fs 檔案中,該檔案本質上是一個事務日誌。
DirectoryStorage
此選項為每個物件修訂版儲存一個檔案。在這種情況下,它不需要在非正常關閉時重建 Data.fs.index。
RelStorage
此選項將 pickle 儲存在關係資料庫中。支援 PostgreSQL、MySQL 和 Oracle。
要建立 ZODB 資料庫,我們需要一個儲存、一個數據庫以及最終的一個連線。
第一步是擁有儲存物件。
import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('mydata.fs')
DB 類使用此儲存物件獲取資料庫物件。
db = ZODB.DB(storage)
將 None 傳遞給 DB 建構函式以建立記憶體資料庫。
Db=ZODB.DB(None)
最後,我們建立與資料庫的連線。
conn=db.open()
然後,連線物件透過 ‘root()’ 方法使您能夠訪問資料庫的 ‘root’。‘root’ 物件是包含所有持久化物件的字典。
root = conn.root()
例如,我們將學生列表新增到根物件,如下所示:
root['students'] = ['Mary', 'Maya', 'Meet']
在提交事務之前,此更改不會永久儲存在資料庫中。
import transaction transaction.commit()
要儲存使用者定義類的物件,該類必須繼承自 persistent.Persistent 父類。
子類化的優勢
子類化 Persistent 類具有以下優勢:
透過設定屬性,資料庫將自動跟蹤對物件所做的更改。
資料將儲存在其自己的資料庫記錄中。
您可以儲存不屬於 Persistent 子類的的資料,但它將儲存在引用它的任何持久化物件的資料庫記錄中。非持久化物件由其包含的持久化物件擁有,如果多個持久化物件引用相同的非持久化子物件,它們將獲得自己的副本。
讓我們定義一個學生類,如下所示,它是 Persistent 類的子類:
import persistent
class student(persistent.Persistent):
def __init__(self, name):
self.name = name
def __repr__(self):
return str(self.name)
要新增此類的物件,讓我們首先按照上述方法設定連線。
import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('studentdata.fs')
db = ZODB.DB(storage)
conn=db.open()
root = conn.root()
宣告物件並新增到根,然後提交事務。
s1=student("Akash")
root['s1']=s1
import transaction
transaction.commit()
conn.close()
由於根物件類似於內建字典,因此可以使用 items() 方法以檢視物件的形式檢索新增到根的所有物件的列表。
print (root.items())
ItemsView({'s1': Akash})
要從根中獲取特定物件的屬性,
print (root['s1'].name) Akash
物件可以輕鬆更新。由於 ZODB API 是一個純 Python 包,因此它不需要使用任何外部 SQL 型別語言。
root['s1'].name='Abhishek' import transaction transaction.commit()
資料庫將立即更新。請注意,transaction 類還定義了 abort() 函式,它類似於 SQL 中的 rollback() 事務控制。