我正在使用Flask制作一个小型webapp来管理一个团队项目,在这个网站中我需要管理考勤和会议报告。我没有时间进入SQLAlchemy,所以我需要知道将CSV用作数据库可能有什么坏处。
答案 0 :(得分:3)
不要这样做。
CSV的问题是......
a,并发性是不可能的:这意味着当两个人同时访问您的应用时,无法确保他们不会干扰每个另外,改变彼此的数据。使用CSV文件作为后端时无法解决此问题。
b,速度:每当您对CSV文件进行更改时,都需要重新加载整个文件。解析文件会占用内存和时间。
制作数据库是为了解决这个问题。
但我同意,您不需要为一个小应用程序学习SQLAlchemy。
您应该考虑使用轻量级替代品。
您正在寻找的是ORM - 对象关系映射 - 将Python代码转换为SQL并为您管理SQL数据库。
PeeweeORM和PonyORM。两者都易于使用,并将所有SQL转换为Python,反之亦然。两者都是免费供个人使用,但如果您将Pony用于商业用途,则Pony需要花钱。我强烈推荐PeeweeORM。您可以开始使用SQLite作为Peewee的后端,或者如果您的应用程序变大,您可以轻松地插入MySQL或PostGreSQL。
答案 1 :(得分:1)
不要这样做,CSV就是。
还有许多其他可能性,例如sqlite数据库,python shelve等。标准库中的可用选项汇总为here。
鉴于您的应用程序是Web应用程序,您需要考虑并发性对解决方案的影响,以确保数据完整性。您还可以考虑使用更强大的数据库,例如postgres,其中有许多python库。
答案 2 :(得分:0)
我认为只要你从中抽象出来就没有错。即确保你在写的内容和实现方式之间保持清晰的分离。这会使你的代码膨胀一下,但它会确保你可以在几天内交换你的CSV存储。
即。假装您可以将数据保存在内存中,就好像将它保存在内存中一样。不要在烧瓶应用中写“openCSVFile”。使用initPersistence()。不要写“csvFile.appendRecord()”。使用“persister.saveNewReport()”。如果你真的意识到CSV是一个瓶颈,你可以写一个新的persister插件。
还有一些好处,比如你不必在测试中使用模拟库来加快它们的速度。你只需提供另一个持有人。
答案 3 :(得分:0)
对于有多少人不赞成使用CSV作为数据库存储后端格式,我绝对感到困惑。
并发:有 否 的原因,导致CSV无法与并发一起使用。就像数据库线程可以在同一时间将二进制文件的一个区域写入另一个二进制文件的方式一样。 数据库可以对CSV文件进行完全相同的操作。就像使用日记来维护单个交易的原子性一样,可以完成相同的操作CSV 。
速度:为什么当数据库可以对 ALL WHOLE 文件? >其他数据库存储格式,在索引文件中查找记录的起始字节,并在恒定时间内 SEEK 对其进行记录,并覆盖数据并注释掉剩下的所有内容,并将可用空间记录在单独的索引文件中,就像数据库可以将二进制“行”的所有不需要区域的字节清零并将可用空间记录在单独的索引文件中一样索引文件 ...我只是不理解这种对非二进制格式的敌意,因为可以用一种格式完成的所有事情都可以用另一种格式完成... (可能是原始二进制数据压缩除外),具体取决于所使用的特定CSV语法(特殊的二进制注释等)。
紧急访问:CSV的附加好处是,数据库不可避免地死掉(不可避免地发生),您留下的CSV文件在紧急情况下仍然可以快速访问...这就是主要原因是我没有永远对必不可少的数据使用二进制存储,即使数据库由于编程不当而中断,这些数据也应该可以快速访问。
是的,每次在电子表格程序中对CSV文件进行更改时,都必须重新编制CSV文件的索引,但这与在索引/表损坏/之后必须重新编制二进制数据库没有什么不同。删除/不同步/等/等。