错误 psycopg2。编程错误:无法从 PokeJSON 适应类型 'dict'



无法从PokeApi中插入前100个Pokemon

import psycopg2
import json
import myutils
import requests
conn=psycopg2.connect(                                                                                                                          
host='host',database='database',
user='user',password='password',
connect_timeout=3)
cur=conn.cursor()
sql='DROP TABLE IF EXISTS pokeapi;'
cur.execute(sql)
conn.commit()
print(sql)
sql = 'CREATE TABLE IF NOT EXISTS pokeapi (id SERIAL,body JSONB);'
cur.execute(sql)
conn.commit()
print(sql)   
for i in range(1,101):
url='https://pokeapi.co/api/v2/pokemon/%s' % (str(i))                                                                                       
response = requests.get(url)
text = response.text
js = json.loads(text)
stuff = js.get('forms', None)
sql='INSERT INTO pokeapi VALUES (%s)'
cur.execute(sql,(stuff,))
conn.commit()
print(sql)

这是我得到的错误

psycopg2.ProgrammingError: can't adapt type 'dict' 
注意JSON结构
"species":{"name":"bulbasaur","url":"https://pokeapi.co/api/v2/pokemon-species/1/"}

在将python字典作为查询参数传递时,必须使其适应Json。

from psycopg2.extras import Json
#...
cur.execute(sql,(Json(stuff),))

相关内容

最新更新