2012-02-16 75 views
1

我使用ZMySQLDA連接器在數據庫用戶名密碼格式中使用ZMySQLDA連接器連接到來自Plone(Zope)的Mysql中的數據庫。
但我需要從外部文件傳遞連接字符串,以便我可以從外部文件更改它,而無需從zope管理界面更改連接對象。
可能嗎?
任何幫助或指針,將不勝感激。Plone:將連接字符串從外部文件傳遞到zmysqlda

+0

這需要多久改變一次以及如何觸發改變?當Plone開始時?隨着每一個連接? – SteveM 2012-02-16 15:46:11

+0

每當zmysqlda嘗試連接到數據庫時,它應該從外部文件中獲取連接字符串。 – 2012-02-17 06:04:51

+0

這會有點麻煩,因爲這些數據庫適配器維護池連接,你將不得不確保你的解決方案是線程安全的。這不是一個答案,但如果我試圖這樣做,我會寫一個自定義視圖作爲數據庫連接的代理,然後開始研究DA界面以找出如何安全關閉和打開連接。更新連接字符串將是簡單的部分。 我想你可能會發現,當你完成所有這些工作之後,你可以轉向使用SQLAlchemy並且更加快樂。 – SteveM 2012-02-17 16:03:40

回答

1

不容易。

你不說你需要究竟是如何獲得存儲在文件系統中的連接字符串:如果唯一的限制是它需要上的文件系統,那麼這就是z3c.saconfig是什麼。它得到的配置從ZCML,如:

<configure xmlns="http://namespaces.zope.org/db"> 
    <include package="z3c.saconfig" file="meta.zcml"/> 
    <engine name="otn" url="postgresql://[email protected]${buildout:dbhost}/otnunit" /> 
    <session name="pas.plugins.sqlalchemy" engine="otn" /> 
</configure> 

但z3c.saconfig是SQLAlchemy的,和你需要從ZMySQLDA切換到SQLAlchemyDA,即使這樣也不會是自動的。如果你準備好轉換,我可以幫你解決問題。

據我所見,ZMySQLDA是一個過時的適配器(實際上,我沒有看到很多人使用Zope DA,但至少SQLAlchemyDA與SQLAlchemy一起工作,維護得很好)。

如果您使用z3c.saconfig,那麼您可以使用collective.saconnect維護連接字符串(不再位於文件中,但位於Plone控制面板而不是ZMI中),然後您可以擁有適配器在連接字符串更改時重建連接。僅僅使用z3c.saconfig不會讓你這樣做。

我看不到一個簡單的方法來更改文件系統對象更新連接字符串。至少在修改文件以實現更改後,您需要遍歷某個視圖。

+0

你讓我對!我只需要連接字符串在外部文件中是唯一的限制。但我只想堅持使用ZMySQLDA。有沒有ZMySQLDA的配置?或者我們可以爲它創建任何配置文件?請幫助我繼續前進謝謝。 – 2012-02-17 06:07:14

+0

對不起,但這不可能發生。看到我上面編輯的評論。 – Auspex 2012-02-17 16:37:02