使用python的postgresql数据库中的json数据插入问题 main.py

使用python的postgresql数据库中的json数据插入问题 main.py,python,json,database,postgresql,file,Python,Json,Database,Postgresql,File,data.json postgresql列字段 我的数据库连接正常。在第37行的图片中,当我使用转储而不是加载时,第50行显示了另一个问题,“Typeerror:字符串索引必须是整数”。 注意,这里的json格式类型是一个列表。 这类问题,但不完全是我见过的很多,但都不起作用 谢谢。将json加载到dict列表中一次+删除一个额外的逗号 import json with open('data.json', 'r') as f: data = json.load(f) # now y

data.json postgresql列字段

我的数据库连接正常。在第37行的图片中,当我使用转储而不是加载时,第50行显示了另一个问题,“Typeerror:字符串索引必须是整数”。 注意,这里的json格式类型是一个列表。 这类问题,但不完全是我见过的很多,但都不起作用


谢谢。

将json加载到dict列表中一次+删除一个额外的逗号

import json

with open('data.json', 'r') as f:
    data = json.load(f)
# now  you can iterate and push to entries to DB
data.json

[
    {
        "id": 1,
        "name": "Prosenjit Das",
        "log_date": "2019-03-02",
        "log_time": "12:10:12.247257",
        "login": null,
        "logout": null
    },
    {
        "id": 2,
        "name": "Sudipto Rahman",
        "log_date": "2019-03-02",
        "log_time": "12:10:12.247257",
        "login": "11:26:45",
        "logout": "10:49:53"
    },
    {
        "id": 3,
        "name": "Trump Khatun",
        "log_date": "2019-03-02",
        "log_time": "12:10:12.247257",
        "login": null,
        "logout": null
    }, --> was removed
]

所以我会在这里做一些改变

with open('data.json') as f:
    data = json.load(f)

# no need to do f.close() since we are using a context manager

fields = [
    'id', #integer
    'name', #varchar
    'log_date', #date
    'log_time', #timestamp
    'login', #timestamp
    'logout' #timestamp
]

for item in data:
    my_data = [item[field] for field in fields]
    insert_query = "INSERT INTO employee (id, name, log_date, log_time, login, logout) VALUES (%s, %s, %s, %s, %s, %s)"

    # also ALL placeholders must be %s even if it is an integer
    cur.execute(insert_query, tuple(my_data))
此外,如果您正在使用
psycopg2
模块执行DB操作,则可以执行以下操作

from psycopg2.extras import execute_values

my_data = [tuple(item[field] for field in fields) for item in data]
insert_query = "INSERT INTO employee (id, name, log_date, log_time, login, logout) VALUES %s"
execute_values(cursor, insert_query, my_data) 

json
无效,因为数组中最后一个对象后面有一个逗号,请删除该逗号并再次尝试读入,也不要逐行读入
json
文件,只需从@aws_peedient处一次读入即可,无论何时使用
json
文件,我喜欢在运行之前将内容粘贴到中,以检查其语法是否正确program@aws_apprentice谢谢但这是我从API获取的json数据。在这种情况下,我可以在检索json数据后删除逗号吗?这里还有其他问题,特别需要指定插入的列,因为您没有上载列表中的所有列table@Prosenjit你必须修改它以符合json标准,否则它是无效的jsonSorry我还没有找到尾随逗号标准解决方案你说你的json是有效的,没有尾随逗号这是有效的。你可以尝试一下我在上面给出的,在你给我的网站上链接我的json数据。请试一试,我在上一篇文章中使用了逗号,但得到了相同的输出。在这个站点中,我测试了我的json数据并显示了有效的。这里到底发生了什么,我不明白该用哪个逗号。你可以检查我的json数据是否有效。json看起来不错。你还面临什么问题吗?没有,只有我面对过这个问题。
with open('data.json') as f:
    data = json.load(f)

# no need to do f.close() since we are using a context manager

fields = [
    'id', #integer
    'name', #varchar
    'log_date', #date
    'log_time', #timestamp
    'login', #timestamp
    'logout' #timestamp
]

for item in data:
    my_data = [item[field] for field in fields]
    insert_query = "INSERT INTO employee (id, name, log_date, log_time, login, logout) VALUES (%s, %s, %s, %s, %s, %s)"

    # also ALL placeholders must be %s even if it is an integer
    cur.execute(insert_query, tuple(my_data))
from psycopg2.extras import execute_values

my_data = [tuple(item[field] for field in fields) for item in data]
insert_query = "INSERT INTO employee (id, name, log_date, log_time, login, logout) VALUES %s"
execute_values(cursor, insert_query, my_data)