Datahub读取JSON数据代码失效,报错非表格数据不支持read方法
解决
Methods iter/read are not supported for non tabular data报错及数据写入SQL方案 问题原因
你遇到的报错是因为当前获取的package.resources[0]不再是**表格类型(tabular)**资源——Datahub上这个数据集的datapackage结构可能更新了,第一个资源变成了非表格格式(比如元数据、描述文件等),而read()/iter()方法仅支持tabular类型的资源。
解决方案步骤
1. 筛选表格类型资源并读取数据
修改读取数据的代码,先筛选出支持表格操作的资源,再读取:
from datapackage import Package package = Package('http://datahub.io/core/population/datapackage.json') # 方法1:筛选所有表格类型资源,取第一个 tabular_resources = [res for res in package.resources if res.tabular] if not tabular_resources: raise ValueError("未找到表格类型的资源") data_resource = tabular_resources[0] # 方法2:按资源名称精准筛选(更可靠,避免资源顺序变化) # data_resource = package.get_resource('population') # 读取表格数据 data = data_resource.read() print(data)
2. 优化SQL数据写入(批量插入更高效)
原来的循环单条插入效率较低,建议用executemany()批量插入,既简洁又提升性能:
# 假设你已经建立了数据库连接cursor和cnxn对象 insert_query = "insert into Population_Country (CountryName,CountryCode,Year,PopulationNumber) values (?,?,?,?)" # 批量插入所有数据 cursor.executemany(insert_query, data) cnxn.commit()
调试小技巧
如果不确定哪个资源是你需要的,可以先打印所有资源的信息,确认名称和类型:
for res in package.resources: print(f"资源名称: {res.name}, 是否为表格: {res.tabular}")
运行后你会看到类似输出,找到名称为population且tabular为True的资源即可。
内容的提问来源于stack exchange,提问作者Student of the Digital World
相关产品推荐
相关产品推荐

