【问题标题】:Digi ConnectPort Database adapterDigi ConnectPort 数据库适配器
【发布时间】:2011-10-04 08:33:42
【问题描述】:

我在这里有一个Digi ConnectPort X4,我将在其上运行一个简单的 Web 服务器来提供来自所连接的 ZigBee 网络的信息。

HTTPBaseServer 和子类是纯 Python 类,但我也希望在设备上运行某种数据库。由于我不需要复杂的功能,我想我会尝试让 PySQLite 在这个嵌入式盒子上运行。

但是,事实证明,我不能在这个盒子上使用 GCC,所以还有其他可能在这个盒子上获得某种数据库功能吗?还是我错过了在这个盒子上安装那个 SQLite 适配器的机会?

【问题讨论】:

    标签: python database pysqlite


    【解决方案1】:

    一定有人有编译器来制作 Python。需要编译器才能使 (py)sqlite 正常工作。

    您可以改用 db/anydbm 模块,该模块将使用 dbm 或纯 Python 替代方案。这不会为您提供 SQL 数据库,但会为您提供可能足以满足您的需求的键值存储。

    【讨论】:

    • 是的,我可以询问制造商是否可以为这个特定的盒子编译代码;但是我认为他们可能想要保护知识产权。我希望能够存储由时间戳、ZigBee 设备对象 ID 和一些实数(功率、电流、THD、电压等)组成的元组。键值系统对我来说就像一个简单的数组。虽然这对于简单的应用程序可能非常强大,但当将来可能需要超过 50 个设备时,我的应用程序可能需要为单个设备存储 104.000 个记录/元组。
    • 我看到有一个 Shelve 类,它使用带有 Marshal 或 Pickle 的 anydb 系统将数据序列化为字符串。但是,这意味着我的开销会变得很大。另一件事是 Shelve 也不是“开箱即用”的......
    • Shelve 完全是 Python,因此我能够运行架子示例。我想我暂时可以使用这个!谢谢!
    【解决方案2】:

    我的情况和你一样。您可以使用一些元组或在我的情况下使用一些字典使自己成为伪数据库。类似的东西:

    伪数据库={}

    pseudoDB[1]={'id':1, 'zb-dev-object':ZB_object, 'power':power_value} #等等

    【讨论】:

    • 我将它保存在另一个 python 文件 (.py) 中(就像字典一样打印它),并且在我的 ConnectPort X4 重新启动时,该文件像模块一样导入。这意味着您必须注意数据库术语中的任何 INSERT、UPDATE、DELETE。
    • 我最终做了类似的事情,但我可以仅从索引中获取列信息,因为这样更有效。最终,我只是承担了损失,并没有将所有值直接写入磁盘,只是每两分钟左右一次。文件 I/O 有很多开销。至于读取数据;这仍然很慢,但不经常这样做,可以轻松改进,尽管这需要另一个自定义解决方案。
    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2013-12-13
    • 1970-01-01
    相关资源
    最近更新 更多