Отправить JSON в базу данных с Python SQLAlchemy - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь добавить JSON данные, отправленные клиентом, в мою базу данных, код, который я пробовал:

@app.route('/postjson', methods=['POST'])
def postEventViewer():
    print(request.is_json)

    content = request.get_json()
    items = []
    for item in content:
        items.append(item['Values'])
        items.append(item['Count'])
        items.append(item['Group'])
        items.append(item['Name'])

        values = item['Values']
        count = item['Count']
        group = item['Group']
        name = item['Name']

        engine.execute('INSERT INTO EventViewer (Values, Count, Group, Name) VALUES (:value, :count, :group, :name)', value=values, count=count, group=group, name=name)

Это дает мне следующую ошибку:

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "Values": syntax error

Но использование того же кода с меньшим количеством параметров в эквивалентной базе данных работает нормально и добавляет в базу данных, как и ожидалось:

engine.execute('INSERT INTO person (name, balance) VALUES (:name, :balance)', name=name, balance=count)

Что я здесь не так делаю? Спасибо!

1 Ответ

2 голосов
/ 10 января 2020

Эта ошибка вызвана тем, что Values является зарезервированным ключевым словом в sql. Вам нужно заключить его в двойные кавычки, чтобы считать его именем столбца.

РЕДАКТИРОВАТЬ

В качестве имени столбца используется еще одно ключевое слово Group. Вам также необходимо заключить его в двойные кавычки.

Попробуйте выполнить приведенный ниже запрос.

@app.route('/postjson', methods=['POST'])
def postEventViewer():
    print(request.is_json)

    content = request.get_json()
    items = []
    for item in content:
        items.append(item['Values'])
        items.append(item['Count'])
        items.append(item['Group'])
        items.append(item['Name'])

        values = item['Values']
        count = item['Count']
        group = item['Group']
        name = item['Name']

        engine.execute('INSERT INTO EventViewer ("Values", Count, "Group", Name) VALUES (:value, :count, :group, :name)', value=values, count=count, group=group, name=name)
...