python - 一次将 API 响应插入多行 - psycopg2
问题描述
我想将INSERT
来自 API 的结果字典输入到我的数据库中,到目前为止我可以一次插入一个项目。
这是我的代码:
import json
import requests
import psycopg2
def my_func():
response = requests.get("https://path/to/api/")
data = response.json()
while data['next'] is not None:
response = requests.get(data['next'])
data = response.json()
for item in data['results']:
try:
connection = psycopg2.connect(user="user",
password="user",
host="127.0.0.1",
port="5432",
database="mydb")
cursor = connection.cursor()
postgres_insert_query = """ INSERT INTO table_items (NAME) VALUES (%s)"""
record_to_insert = item['name']
cursor.execute(postgres_insert_query, (record_to_insert,))
connection.commit()
count = cursor.rowcount
print (count, "success")
except (Exception, psycopg2.Error) as error :
if(connection):
print("error", error)
finally:
if(connection):
cursor.close()
connection.close()
my_func()
所以,这个是有效的,但是例如,如果我想插入table_items
,不仅仅是name
在行上,而是说name, address, weight, cost_per_unit
,从那个表,那么我将更改这些代码行:
postgres_insert_query = 'INSERT INTO table_items (NAME, ADDRESS, WEIGHT, COST_PER_UNIT) VALUES (%s,%s,%s,%s)'
record_to_insert = (item['name']['address']['weight']['cost_per_unit'])
然后它会抛出:
无法将记录插入 table_items 表字符串索引必须是整数 PostgreSQL 连接已关闭
我的意思是,第一个版本,只有一个字段可以完美运行,但我每次都需要插入其他 3 个字段,有什么想法吗?
解决方案
当您调用项目属性来定义参数时,您必须修复语法,并更改您传递给参数化查询的对象,因为record_to_insert
已经是一个元组:
postgres_insert_query = """ INSERT INTO table_items
(NAME, ADDRESS, WEIGHT, COST_PER_UNIT) VALUES (%s,%s,%s,%s)"""
record_to_insert = (item['name'],
item['address'],
item['weight'],
item['cost_per_unit'])
cursor.execute(postgres_insert_query, record_to_insert) # you can pass the tuple directly
推荐阅读
- c++ - c++ 函数在 f() + g() 中调用顺序
- python - 获取具有多边形结构的列表的最小值
- javascript - 如何在浏览器的警告框中显示大文本并防止文本修剪?
- python - 为什么我已经安装了 Kivy,却不断收到 ModuleNotFoundError?
- spring - Spring Security OAuth 和 Cucumber 访问被拒绝
- xml - 合并与节点名称中的“_LIST”共享相同名称的 XML 节点以及根级别
- c# - 检索时 ASP.NET Core 2.1 Cookie 项为空
- python - 字典中的插入顺序和重复键
- c# - 使用 Adobe Illustrator 和 C# 进行动态内容替换
- java - 使用 install4j 以编程方式检查 mediaFileId