2011-10-04 35 views
1

我在這裏有一個Digi ConnectPort X4,我將在其上運行一個簡單的Web服務器來提供來自附加的ZigBee網絡的信息。Digi ConnectPort數據庫適配器

HTTPBaseServer和子類是純Python類,但我也想在設備上運行某種數據庫。由於我不需要複雜的功能,我以爲我會嘗試讓PySQLite在這個嵌入式盒子上運行。

然而,事實證明,我不能在這個盒子上使用GCC,那麼有沒有其他可能性在這個盒子上獲得某種數據庫功能?還是我錯過了在這個盒子上獲得SQLite適配器的可能性?

回答

2

有人必須有一個編譯器來製作Python。需要編譯器來獲取(py)sqlite的工作。

您可能會使用db/anydbm模塊,而不是使用dbm或純Python替代品。這不會給你一個SQL數據庫,但會給你一個關鍵的價值商店,這可能足以滿足你的需求。

+0

是的,我可以問製造商是否可以爲這個特定的盒子編譯代碼;但我認爲他們可能想保護知識產權。 我希望能夠存儲由時間戳,ZigBee設備對象ID和一些實數(功率,電流,THD,電壓等)組成的元組。鍵值系統對我來說就像一個簡單的數組。雖然這對於簡單的應用程序來說可能非常強大,但是當將來需要> 50個設備時,我的應用程序可能需要爲單個設備存儲104.000個記錄/元組。 – Joost

+0

我看到有Shelve類,它使用帶有Marshal或Pickle的anydb系統將數據序列化爲一個字符串。但是,這意味着我的開銷變得相當大。另一件事是,Shelve也不是'開箱即用'的... – Joost

+0

然而,Shelve完全是Python,因此我能夠運行貨架示例。我想我現在可以用這個工作!謝謝! – Joost

2

我和你處於同樣的境地。你可以用一些元組讓你自己成爲一個僞DB,或者在我的例子中是一些字典。類似的東西:

pseudoDB = {}

pseudoDB [1] = { 'ID':1, 'ZB-DEV-對象':ZB_object, '力量':power_value}#,然後等

+0

我在另一個python文件(.py)中保存了它(就像字典一樣),並且在一段時間當我的ConnectPort X4重新啓動時,該文件就像模塊一樣被導入。這意味着你必須關心數據庫中的任何INSERT,UPDATE,DELETE。 –

+0

我已經做了類似的事情,但是我可以從索引中派生出列信息,因爲它的工作效率更高。最終,我只是拿走了我的損失,並沒有直接將所有值寫入磁盤,只是每兩分鐘左右一次。文件I/O有很多開銷。至於讀數據;雖然這還需要另一種定製解決方案,但仍然非常緩慢,但並不經常這麼做,可以輕鬆改進。 – Joost