Python应用的单文件存储

4 投票
5 回答
2440 浏览
提问于 2025-04-16 03:34

我正在开始开发一个Python应用程序,这个程序有个图形界面,可以用来编辑各种图形和数字数据(如果你想知道的话,这是一个用于移动机器人配置和管理的工具)。我现在有个问题,就是如何存储一个项目的数据(也就是机器人的数据)。数据量不会太大(最多大约10MB),而且种类很多(包括机器人的几何数据、地图、任务、平台日志、记录的传感器数据、项目偏好设置等等)。

我不想自己开发一个存储层。项目数据应该存储在一个文件里,并且能很方便地从Python中访问。存储更新的过程要简单:我不想使用一个明确的“保存”操作,任何变化都应该在发生时就被存储。

单独用一个ZIP文件可能不太实用,还需要在上面再写一个存储层,把应用程序的对象映射到存储中。SQLite是一个明显的选择,可能还会用到SQLAlchemy作为对象关系层。ZODB看起来也很有趣,但我到现在为止还没有使用过。

有什么推荐吗?

补充说明:我说的“应用程序”是指安装在用户电脑上的程序,而不是网页应用。

补充说明:我会打开其他人(不一定可信)创建的数据文件,类似于我处理Word或PDF文件的方式。这必须是一个安全的操作。

5 个回答

0

为什么不试试CouchDB呢?因为你的数据是多种多样的,这种数据库最合适。它使用起来很简单,而且10MB的数据对它来说根本不算什么:http://pypi.python.org/pypi/CouchDB

5

shelve 是一个可以让你存储任何可以被“腌制”的类型的工具。简单来说,它提供了一种映射的方式,让你可以把数据保存起来,方便以后再用。

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

撰写回答