儘管NoSQL一度成為熱門話題,但我們還是活在SQL世界裡,到處可見RDBMS(Relational Database Management System)作為資料服務的後端引擎,使用ZODB(Zope Object Database)的Plone該如何與SQL資料庫和平共處,必然是整合人員關心的議題。
想要存取SQL資料庫,早期是透過Database Adapter直接建立連接,再用Z SQL Method建立存取邏輯的程式,最後由Page Template建立操作介面。
除了Database Adapter之外,現在常見的做法是透過SQLAlchemy來連接,因為SQLAlchemy提供Object-Relational-Mapper(ORM)介面,讓Python程式員擁有更直覺的操作經驗。
由於RDBMS的transaction系統必須和Zope搭配合作,SQLAlchemy並不能直接在Zope裡面工作,必須藉由zope.sqlalchemy模組來整合。利用這些工具,本文將在Plone 4.1環境,分別以MySQL和PostgreSQL為範例,介紹幾種常見的資料庫結合方式。
整合原理
以Database Adapter為例,它們屬於Zope系統的低階程式,與資料庫連接後,透過Database Connection和Plone應用程式互動,如圖1所示。
|
▲圖1 Zope和關聯式資料庫連接示意。 |
建立好Database Connection之後,通常會再透過Z SQL Method存取資料庫,執行包括「查詢」、「新增」、「刪除」以及「修改」的動作,執行結果再由(Python) Script或Page Template處理,最後產生成HTML給使用者,如圖2所示
|
▲圖2 透過Z SQL Method存取資料庫。 |
系統可以存在多個Z SQL Method和Database Connection,並且同時存取不同的資料庫內容。
存取既有資料庫
MySQL是很常見的線上資料庫選項,Python或Plone可以透過MySQL-python和ZMySQLDA來連接,安裝方式是在develop.cfg檔案裡指定MySQL的Python函式庫,還有[zmysqlda]的設定值,如圖3所示。
|
▲圖3 develop.cfg設定ZMySQLDA範例。 |
成功啟動Zope之後,在ZMI裡面,讀者可以看到Z MySQL Database Connection的新增選項,如圖4所示。
|
▲圖4 ZMI下拉選單中可以新增Z MySQL DC。 |
只需要在Database Connection String欄位內依序填寫database user password等參數,就能完成基本連結(圖5)。
|
▲圖5 填寫Z MySQL DC連接字串。 |