使用 Python SQLAlchemy 将 JSON 发布到数据库

Posted

技术标签:

【中文标题】使用 Python SQLAlchemy 将 JSON 发布到数据库【英文标题】:Post JSON to database with Python SQLAlchemy 【发布时间】:2020-01-10 08:41:31 【问题描述】:

我正在尝试将从客户端发布的 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】:

此错误是因为Valuessql 中的保留关键字。您需要将其用双引号括起来以将其视为列名。

编辑

您还有一个关键字用作列名,即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)

【讨论】:

以上是关于使用 Python SQLAlchemy 将 JSON 发布到数据库的主要内容,如果未能解决你的问题,请参考以下文章

Python开发:ORM sqlalchemy

Python Sqlalchemy

Python 9 sqlalchemy ORM

Python-Sqlalchemy-Postgres:如何将子查询结果存储在变量中并将其用于主查询

Python3-ORM-Sqlalchemy

Python - 使用 sqlalchemy 的 Postgres 查询返回“空数据框”