【发布时间】:2019-01-23 10:03:25
【问题描述】:
我想制作一个 python 程序(带有 PyQt GUI,但我不知道这是否相关),即使程序关闭也必须保存一些我想要存储的信息。我要存储的信息示例:
用户可以在文件对话窗口中搜索文件。我想在以前使用的目录中启动文件对话窗口,即使程序在文件搜索之间关闭。
用户可以输入他们自己的类别来对项目进行排序,建立在我的一些预定义类别之上。这些新类别应该会在程序下次启动时提供。
现在我想知道存储此类信息的正确方法是什么。我应该用泡菜吗?一个合适的数据库(我知道一点 sqlite3,但必须阅读)?我自己解析的简单文本文件?对于示例 1 中的数据是一回事,对于示例 2 中的数据是另一回事。?
另外,无论我用什么方式存储它,我应该把那个文件放在哪里?
我在上下文中询问我可能希望稍后将我的程序作为独立应用程序提供给其他人使用(使用 py2app、py2exe 或 PyInstaller)。
现在我只是在我的 .py 文件所在的目录中保存一个 pickle 文件,例如 this answer reconmends,但答案还特别提到:
对于个人项目可能就足够了。
(强调我的)
如果我想将程序作为独立应用程序提供给其他人使用,那么使用 pickle 也是“正确、专业”的方式吗?
【问题讨论】:
-
SQLite 可能是一个更好的解决方案。你可以在这里查看:sqlite.org/index.html
-
我投票结束你的问题主要是基于意见 - 并不是说这本身就是一个坏问题,而是你唯一的标准 - “正确的专业方式” - 无法量化,也没有基于此标准的答案只有事实才能证明。实际上,我自己对“正确的专业方式”的定义是“可靠地完成工作的最简单的解决方案”,所以我真的不会在这里将 sqlite 视为“正确的专业方式”。对于您的需要,仅 json 文件似乎是一个非常明显的选择。
-
注意:如果您必须处理更大的关系数据集并且不想依赖外部 rdbms,那么 sqlite 将是一个不错的选择。
-
@brunodesthuilliers,我明白为什么你会在这种情况下投票关闭它,但作为需要持久数据的新手,我不知道没有一些“正确、专业”的方式,在一些我不知道的样式指南/编码约定中定义。
-
嗯,实际上“专业”仅意味着您可以为您的工作获得报酬 - 它并没有说明您的工作质量,我可以告诉您大量的“专业”代码我看到绝对不是“适当的”。不,对于这样的设计选择,没有“样式指南”或“编码约定”(两者都是纯粹的任意规则 FWIW)。充其量是“良好实践”,主要包括选择健壮的、经过验证的、稳定的、众所周知的、维护良好的以及尽可能与语言无关的东西。当然也适用于您的用例。
标签: python database pickle python-standalone