Используя JSON как хранилище данных с Flask? - PullRequest
0 голосов
/ 24 января 2019

У меня есть вопрос, по которому мне нужно мнение. У меня небольшой файл JSON, и я использую его как хранилище данных.

{"stress": [1, "good"], "physical": [6, "ok"], "mood": [8, "good"], "perception": "neutral", "spoons": 74}

В основном, у меня есть webhook, работающий в колбе на пи для службы alexa. И в течение дня это хранилище данных обновляется. То есть: если вы проходите через одно намерение, оно обновляет стресс до 4. Это НЕ приложение. Это отдельная инсталляционная часть, которая выполняется локально, в комнате, и не нуждается в масштабировании вообще.

Какой лучший способ сделать это? Должен ли я просто сохранить этот файл JSON в корневой папке и импортировать его, а затем записать в него? Стоит ли мне смотреть на что-то вроде tinyDB? Должен ли я бросить в статическую папку Flask?

Опять же, супер крошечная вещь, не нужно масштабировать. Не имеет нескольких пользователей. Я чувствую, что что-то вроде postgres или полный дб это излишне.

1 Ответ

0 голосов
/ 24 января 2019

У меня что-то похожее ... и оно работает на реальном производственном сервере.Однако никогда не бывает более 100 пользователей.Для вашего случая использования это нормально.

Над маршрутами Flask у меня есть две простые функции, которые читают / записывают из / в хранилище данных JSON.Я бы лично создал в вашем приложении отдельную папку с именем «хранилище данных» и просто оставил ее там.Вот простой пример:

def write_json(path, json_data):
    with open(path, 'w') as file_out:
        json.dump(json_data, file_out)


def read_json(path):
    with open(path) as file_in:
        return json.load(file_in)


# begin Flask views/routes
@app.route('/user_form', methods=['POST', 'GET'])
def user_form():
    path = "/home/myapp/datastore/store.json"


    # input from form or wherever your new JSON is coming from...
    # It could also be coming from a REST API etc:
    input = request.form['data']
    # {"new": "data"}


    # read in existing JSON
    existing_json = read_json(path)
    # {"existing": "json"}


    # add new JSON to existing JSON however you see fit
    [(k, v)] = input.items()
    existing_json[k] = v
    {"existing": "json", "new": "data"}


    # now update datastore
    write_json(path, existing_json)


    # could also be app.response or jsonify here etc...
    return render_template("success.html")

и т. Д. *

Просто установите переменную пути в том месте, где хранится ваш файл ...

Итак, как только ваш кодвыполняется, и у вас есть значение, которое можно добавить в хранилище данных, вызвать функцию чтения, добавить новые данные в объект JSON и немедленно вызвать функцию записи, чтобы перезаписать недавно обновленный JSON обратно в тот же файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...