我在python中运行一个烧瓶应用程序,作为提供GUI来操作JSON字典并使用JSON模式验证它的方法。
保持字典能够更改并在不同请求中保存字典的最佳方法是什么。我的用户将在本地运行,因此多个用户同时编辑它时不会出现任何并发问题。我正在计划为JSON字典创建一个全局级变量,并在用户发出POST请求来更改它之后运行一个函数,并将其保存在内存中,直到我完成并将其保存到文本文件中。这是一种合理的方法吗?或者,我是否应该全局保存并在每次更改时将其保存到文件中,然后在下次需要编辑时将其保存回来?
还有另一种方法可以做到更合理的烧瓶吗?我不想使用任何类型的数据库,因为JSON只是一种文本格式,因此在用户完成后将其保存到文件然后下次就可以使用它会简单得多。
答案 0 :(得分:2)
老实说,一个MongoDB实例设置起来非常简单,我认为它超过了#34;只是一个文本文件"给人。 如果我在我的机器上执行此操作,我会将其作为两个docker容器运行(app和db)并使用docker compose启动它。但是如果你打算在其他人的机器上设置它,可能更容易单独安装mongo,考虑到不同的操作系统和所有操作系统。
使用mongo运行,只需编写一个简单的mongo连接器(一个非常简单的例子,我用于最近的项目,而不是最干净但它显示了要点):
from pymongo import MongoClient
class DB:
def __init__(self):
self.client = MongoClient('localhost', 27017)
self.db = self.client.email_db
def save_email(self, email):
if not self.email_exists(email):
self.insert(email)
return True
else:
print('email already stored.')
return False
def insert(self, email):
try:
collection = self.db.emails
collection.insert(email.to_dict())
except Exception as e:
print('An error occurred when inserting email: {}'.format(email.hash), e)
def email_exists(self, email):
query = {
'hash': email.hash,
}
try:
collection = self.db.emails
cursor = collection.find(query)
return cursor.count() > 0
except Exception:
print('Could not query db for email: {}'.format(email.hash))
return False
答案 1 :(得分:0)
您可能会发现this link有帮助。虽然它是一个数据库,但它可以满足您的要求,但是没有什么可以阻止您将其作为字符串数据库,其中每个字符串都是一个完整的JSON文件。相对于全局字典的主要优点是跨会话的持久性,这意味着您不必将任何内容保存到文本文件中。