作为练习,我从API中提取数据并将其插入到psql数据库中。我最初遵循每拉1000个条目的默认限制,但决定我想尝试并获得大约40K行的所有数据。有点实验后,我可以拉4800,但后来我得到如下:Python KeyError:<peewee.IntegerField object at ...>使用peewee insert_many()
Traceback (most recent call last):
File "data_pull.py", line 19, in <module>
postgres_db.Bike_Count.insert_many(data).execute()
File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 3516, in execute
cursor = self._execute()
File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 2901, in _execute
sql, params = self.sql()
File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 3484, in sql
return self.compiler().generate_insert(self)
File "/usr/local/lib/python3.5/dist-packages/peewee.py", line 2084, in generate_insert
value = row_dict[field]
KeyError: <peewee.IntegerField object at 0x7f5b32c2c7f0>
data_pull.py
import json, requests, peewee
import postgres_db
endpoint = 'https://data.seattle.gov/resource/4xy5-26gy.json?$limit=4800'
response = requests.get(endpoint, headers={'X-App-Token': '(REMOVED)'})
if response.status_code == 200:
data = json.loads(response.text)
postgres_db.Bike_Count.create_table(True)
postgres_db.Bike_Count.insert_many(data).execute()
postgres_db.py
import peewee
psql_db = peewee.PostgresqlDatabase('database', user='my_username')
class Bike_Count(peewee.Model):
date = peewee.DateTimeField()
fremont_bridge_sb = peewee.IntegerField()
fremont_bridge_nb = peewee.IntegerField()
class Meta:
database = psql_db
我已经看了在线表格认为那里有一个入口问题,但我找不到任何明显的问题。谢谢您的帮助。
如何将响应数据字符串直接插入到表格中而无需根据需要进行格式化?响应是否保证返回一个带有日期时间值和两个整数的列表? – wave5459
你的意思是格式化它的必要性?我的理解是,json.loads()返回一个对象,在这种情况下,它是一个字典列表。 API文档说这些字段是日期/时间字段和两个数字字段。奇怪的是,我能得到一张高达4800行的表格,然后出现错误。 –
以下是关于数据集信息的链接:https://data.seattle.gov/Transportation/Fremont-Bridge-Hourly-Bicycle-Counts-by-Month-Octo/65db-xm6k –