Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 烧瓶中的全局级变量操作_Python_Flask_Global Variables - Fatal编程技术网

Python 烧瓶中的全局级变量操作

Python 烧瓶中的全局级变量操作,python,flask,global-variables,Python,Flask,Global Variables,我正在用python运行一个flask应用程序,以提供一个GUI来操作JSON字典并用JSON模式验证它 保存字典以便在不同请求中更改和保存它的最佳方法是什么。我的用户将在本地运行此文件,因此多个用户同时编辑此文件时不应出现任何并发问题。我计划为JSON字典提供一个全局级别的变量,并在用户发出POST请求后运行一个函数来更改它,然后像这样将其保存在内存中,直到我完成并将其保存到文本文件中。这是合理的方法吗?或者,我是否应该在每次发生更改时全局保存它并将其保存到文件中,然后在下次需要编辑它时将其拉

我正在用python运行一个flask应用程序,以提供一个GUI来操作JSON字典并用JSON模式验证它

保存字典以便在不同请求中更改和保存它的最佳方法是什么。我的用户将在本地运行此文件,因此多个用户同时编辑此文件时不应出现任何并发问题。我计划为JSON字典提供一个全局级别的变量,并在用户发出POST请求后运行一个函数来更改它,然后像这样将其保存在内存中,直到我完成并将其保存到文本文件中。这是合理的方法吗?或者,我是否应该在每次发生更改时全局保存它并将其保存到文件中,然后在下次需要编辑它时将其拉回


有没有其他更合理的方法?我不希望使用任何类型的数据库,因为JSON只是一种文本格式,所以在用户完成后将其保存到一个文件中,然后就可以下次使用了,这要简单得多。

您可能会觉得很有帮助。它可以满足您的要求,尽管它是一个数据库,但没有任何东西可以阻止您将它变成一个字符串数据库,其中每个字符串都是一个完整的JSON文件。与全局字典相比,它的主要优势是跨会话的持久性,这意味着您不必将任何内容保存到文本文件中。

老实说,MongoDB实例的设置非常简单,我认为它超过了“仅一个文本文件”所带来的便利。 如果我在我的机器上这样做,我会将它作为两个docker容器(app和db)运行,并用docker compose启动它。但是,如果您打算在其他人的机器上安装mongo,考虑到不同的操作系统和所有的操作系统,单独安装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