将具有不同键顺序的多个 json 文件插入 postgres table

inserting multiple json files with different key order into postgres table

我有一个 postgresql table,其中有四列,顺序为:created_at、id、author_id、text

我使用推特 API 来获取符合我的条件的推文(Python)。 Twitter API 每次请求仅允许 500 条推文,这意味着如果我的搜索查询 returns 超过 500 条,我必须多次请求 - 就是这种情况。我想在我的 postgres table

中插入 json 个条目
# get column names from json object
columns=[list(x.keys()) for x in response['data']][0] # creates ['created_at','id','author_id','text']

# get the data from the response
data = json_response['data']

# write entries into postgres table
for item in data:
    my_data = [item[column] for column in columns]
    cur.execute("INSERT INTO tweets VALUES(%s, %s, %s, %s)", tuple(my_data))

现在,如果返回的响应与我的 sql table 的顺序相同,则此方法可以正常工作。但是,json 响应可能具有不同的键顺序。现在可能是 'id'、'author_id'、'text'、'created_at'。

然后我得到一个错误'invalid input syntax for type bigint: ...'

有什么方法可以在插入时保持相同的顺序,即使 json 对象每次都有不同的顺序?

您可以使用 named variablesdict 而不是 tuple:

my_data = {'created_at': '', 'id': '', 'author_id': '...', 'text': '...'}
cur.execute(
    "INSERT INTO tweets VALUES(%(created_at)s, %(id)s, %(author_id)s, %(text)s)",
    my_data
)

如果item中所有的键都存在,你可以简单地传递item来执行,不需要构建my_data