python - 无法将迭代的字典列表发布到 api 端点,只发送列表中的第一个字典
问题描述
我创建了一个简短的脚本,它将从 excel 文件中提取数据,将该数据放入字典中,最终目标是将每个生成的字典发布到我正在使用的 API 中。但无论我做什么,我只能得到要发送的 excel 表中的第一个条目。我在这里想念什么?
我尝试过按正文索引发布,但它说任何高于索引 0 的内容都超出范围,除非我根据索引打印,我可以拉出其中任何一个,并且它们显然存在于 body 变量中。我也尝试通过“员工”变量发布,但它只发布第一组数据。
body = []
for r in range(1, worksheet.nrows):
fname = worksheet.cell(r,0).value
lname = worksheet.cell(r,1).value
email = worksheet.cell(r,2).value
username = worksheet.cell(r,3).value
empid = int(worksheet.cell(r,4).value)
employee = {
"Username": username,
"FirstName": fname,
"LastName": lname,
"Email": email,
"EmployeeID": int(empid),
"IsActive": "true"
}
body.append(employee)
conn = httplib.HTTPSConnection('api-endpoint.com')
conn.request("POST", "/employee/?%s" % params, json.dumps(body), headers)
response = conn.getresponse()
data = json.dumps(response.read())
conn.close()
我不确定这里发生了什么,因为如果我打印正文,我会得到一个字典列表,每个字典都包含正确的员工数据,但是当将它们放入发布请求时,我要么只得到第一个员工被发送到端点,要么没有。
编辑:API 终于回到了我的身边,除了员工列表之外,端点不会,所以发布请求必须在 for 循环中。
我的代码现在看起来像这样:
body = []
for r in range(1, worksheet.nrows):
fname = worksheet.cell(r,0).value
lname = worksheet.cell(r,1).value
email = worksheet.cell(r,2).value
username = worksheet.cell(r,3).value
empid = int(worksheet.cell(r,4).value)
employee = {
"Username": username,
"FirstName": fname,
"LastName": lname,
"Email": email,
"EmployeeID": int(empid),
"IsActive": "true"
}
body.append(employee)
for i in body:
conn = httplib.HTTPSConnection('buddypunch.azure-api.net')
conn.request("POST", "/employee/?%s" % params, json.dumps(employee), headers)
response = conn.getresponse()
data = json.dumps(response.read())
conn.close()
我的 Excel 表中有 3 名员工,但只发布了 2 名。body 的输出如下所示:
[{'Email': u'jim@email.com',
'EmployeeID': 80110,
'FirstName': u'Jim',
'IsActive': 'true',
'LastName': u'Halpert',
'Username': u'JimH'},
{'Email': u'don@email.com',
'EmployeeID': 80111,
'FirstName': u'Don',
'IsActive': 'true',
'LastName': u'Julio',
'Username': u'DonJ'},
{'Email': u'toolman@email.com',
'EmployeeID': 80112,
'FirstName': u'Tim',
'IsActive': 'true',
'LastName': u'Toolman',
'Username': u'TimT'}]
那么为什么循环只访问和发布 3 个中的 2 个呢?
解决方案
您正在 for 循环中执行您的 post 请求,将其移到循环之外,以便它接收完全填充的列表
推荐阅读
- c - CodeBlocks 调试器:监视函数外的变量
- floating-point - 将浮点数转换为保证转换回原始浮点数的有理数
- react-native - 如何获得 2 Flat list 吸引而不是排斥
- javascript - 你好。我是 javascript 和 google app script 的初学者。我已经完成了编码以通过 google sheet 发送电子邮件,但电子邮件没有发送
- amazon-web-services - 如何在 Windows 实例上更新 CloudWatch 代理版本?
- vue.js - 如何将属性传输到 jsx 中的 vue 插槽?
- r - 获得R中多个数据帧的最大值?
- memory-management - 是什么导致了轻微的页面错误?RSS 和 VSZ 常量
- javascript - 如何使用 .filter() 方法过滤对象中的布尔值
- python - 将 ctypes 函数从 Python 2 迁移到 Python 3