使用 Psycopg2 将变量的 JSONB 插入表中(Python 到 Postgres)

问题描述 投票:0回答:1

我的任务是从 pokeapi 获取 JSON 数据,并使用 psycopg2 将其放入 pg4e 服务器(每个人都是 postgres)上的表中。

尽管我无法将 python 中的 JSON 数据放入服务器上表的 JSONB 列中,但它仍然有效。我尝试了很多机会,但我需要支持。

如何将保存在变量(文本)中的 JSON 放入表中?

提前非常感谢您

我的代码:

Imports...

conn...
cur...



sql = '''
CREATE TABLE IF NOT EXISTS pokeapi (id INTEGER, body JSONB);
'''
print(sql)
cur.execute(sql)

url = 'https://pokeapi.co/api/v2/pokemon/1'

print('=== Url is', url)

response = requests.get(url)
text = response.text
print('=== Text is', text) 
text = json.loads(text)

sql = f'Insert into pokeapi (id, body) Values (1, 'text'::JSONB);'
cur.execute(sql, (text, url))

conn.commit()

cur.close()

回复:

如果不存在则创建表 pokeapi(id INTEGER,主体 JSONB);

=== 网址是 https://pokeapi.co/api/v2/pokemon/1 === 文本为 {"powered":[{"ability":{"name":"overgrow","url":"https://pokeapi.co/api/v2/ability/65/"}.. ..

第43行 sql = f'插入pokeapi(id, body) Values(1, 'text'::JSONB);' ^^^^ 语法错误:语法无效

python json postgresql variables psycopg2
1个回答
0
投票

由于字符串格式不正确,您收到语法错误,并且您还尝试使用变量插入 JSON。 这是应该有效的正确代码:

sql = '''
CREATE TABLE IF NOT EXISTS pokeapi (id INTEGER, body JSONB);
'''
cur.execute(sql)
url = 'https://pokeapi.co/api/v2/pokemon/1'
response = requests.get(url)
text = response.text
text_json = json.loads(text)
sql = 'INSERT INTO pokeapi (id, body) VALUES (%s, %s::JSONB);'
cur.execute(sql, (1, json.dumps(text_json)))

conn.commit()

cur.close()
conn.close()

如您所见,我使用 %s 作为参数的占位符,并将其值作为元组传递给

cur.execute()

我还通过

text_json
json.dumps()

转换回 json 字符串
© www.soinside.com 2019 - 2024. All rights reserved.