我开始开发一个Python应用程序,它提供了一个用于编辑各种图形和数字实体的GUI(如果你必须知道,它是移动机器人的配置和管理工具)。其中一个问题是如何存储项目的数据(意味着,对于机器人)。数据量将很低(最大约10MB)并且非常不同(机器人的几何数据,地图,任务,平台日志,记录的传感器数据,项目偏好......)。
我不想开发自己的存储层。项目数据应存储在单个文件中,并可从Python轻松访问。存储更新应该很便宜:我不想使用显式的“保存”操作,并且应该在发生更改时立即存储更改。
单个ZIP文件可能不实用,并且需要在顶部编写持久层以将应用程序对象映射到存储。 SQLite是一个明显的候选者,可能将SQLAlchemy作为对象关系层。 ZODB看起来也很有趣,但到目前为止我还没有经验。
有什么建议吗?
编辑:当我说“应用程序”时,我指的是要安装在用户计算机上的程序,而不是Web应用程序。
编辑:我将打开由其他(不一定是受信任的)人创建的数据文件,类似于我对Word或PDF文件所做的操作。这必须是安全的操作。
答案 0 :(得分:5)
shelve
提供了一个映射界面,允许您存储任何pickleable类型。
答案 1 :(得分:4)
我鼓励你像你在问题中讨论的那样看看SQLAlchemy。您可以将SQLite中的表映射到Python对象。使用SQLAlchemy会话(http://www.sqlalchemy.org/docs/session.html#what-does-the-session-do),您可以运行查询,向表中添加对象并立即发出session.commit命令,以便自动将数据保存到SQLite。
新数据元素:
ed_user = User('ed', 'Ed Jones', 'edspassword') #user is the class you mapped the table to
session.add(ed_user)
session.commit() # basically auto saving here :)
这就是我使用的。我现在正在使用SQLAlchemy进行项目,就像我看到的那样。有关详情,请参阅此处:http://www.sqlalchemy.org/docs/ormtutorial.html#adding-new-objects
答案 2 :(得分:0)
Pickle它!
按照你喜欢的方式在内存中构建你的数据结构,然后当你想要保存时,只需用一个pickle将它们压缩到磁盘上。
答案 3 :(得分:0)
为什么不试试couchdb?由于您的数据是异构的,因此这是最好的方法。易于使用,10MB无关紧要:http://pypi.python.org/pypi/CouchDB
答案 4 :(得分:0)
这是一个很好的质量介绍,人们可能只需在阅读之后就可以决定 http://www.ibm.com/developerworks/aix/library/au-zodb/
请注意,对于该文章末尾提到的复制,ZRS不再仅限于闭源广告,而是开源的。