Python 插入PostgreSQL数据库时出现意外数组元素

Python 插入PostgreSQL数据库时出现意外数组元素,python,python-3.x,postgresql,api,Python,Python 3.x,Postgresql,Api,我正在做一个API。我从该API收到所有信息。api包含关于城市的信息,我想存储结果的数据,结果显示在postgres的meta下面,比如每一行都将成为使用python的数据库行,但我收到错误消息 我从api得到的响应示例 { 'meta': {'license': 'CC By 4.0', 'name': 'openaq-api', 'website': 'https://docs.openaq.org/'}, 'results': [ {'city': 'Amsterdam', 'c

我正在做一个API。我从该API收到所有信息。api包含关于城市的信息,我想存储结果的数据,结果显示在postgres的meta下面,比如每一行都将成为使用python的数据库行,但我收到错误消息

我从api得到的响应示例

{
'meta': {'license': 'CC By 4.0', 'name': 'openaq-api', 'website': 'https://docs.openaq.org/'},
'results': [
    {'city': 'Amsterdam', 'count': 71125, 'country': 'NL', 'locations': 14},
    {'city': 'Antofagasta', 'count': 3416, 'country': 'CL', 'locations': 1},
    {'city': 'Arica', 'count': 1682, 'country': 'CL', 'locations': 1},
    {'city': 'Ayutthaya', 'count': 3880, 'country': 'TH', 'locations': 1},
    {'city': 'Badhoevedorp', 'count': 7862, 'country': 'NL', 'locations': 1},
    ...
    ]
}
这是我的密码:

import openaq
import psycopg2
import json

conn = psycopg2.connect(user="postgres",
                        password="root",
                        host="localhost",
                        database="xyz")
cursor = conn.cursor()
print("Connected")

api = openaq.OpenAQ()
status, resp = api.cities()
result = resp["results"]


for row in result:
    # print(row)
    cursor.execute("INSERT INTO openaq_api_data (openaq) VALUES (%s)", (Json(row),))
这是我的错误:

cursor.execute("INSERT INTO openaq_api_data (openaq) VALUES (%s)", (Json(row),))
    psycopg2.errors.InvalidTextRepresentation: malformed array literal: "{"country": "AD", "name": "Escaldes-Engordany", "city": "Escaldes-Engordany", "count": 193682, "locations": 2}"
    LINE 1: INSERT INTO openaq_api_data (openaq) VALUES ('{"country": "A...
                                                         ^
    DETAIL:  Unexpected array element.

请注意此处突出显示的语法:

cursor.executeINSERT到openaq\u api\u数据openaq值“+行+” 那整根绳子就是一根绳子。如果要传入参数,请执行以下操作:

cursor.executeINSERT到openaq\u api\u数据openaq值%s,第行, 请注意,始终以这种方式传递参数,而不是使用字符串插值来包含数据,这一点很重要

这就是参数的内容,它可以很好地计算简单数据类型。但看起来这里的row实际上是一个Python dict,在这种情况下,它需要额外小心

这里的最佳选择是:

从psycopg2.extras导入Json cursor.executeINSERT到openaq_api_数据openaq值%s,Jsonrow, ^^^^
欢迎来到堆栈溢出。请阅读。你的标题和你的问题提出了不同的问题:标题显然是离题的,因为过于宽泛和基于观点,但你的问题主体似乎提出了一个特定的问题。是否将回答存储在一个列中?@RajatMishra yesWhat type of column是openaq?@Chris it's JSONan error:psycopg2.ProgrammingError:无法调整“dict”类型@Osamabillah,您试图将其保存为JSON的单个blob,对吗?进入json专栏?@Chris你能检查一下我尽力描述我的问题吗problem@Osamabillah,请参阅我的更新answer@Osamabillah,请再次更新您的问题。代码和错误消息很难在注释中读取。