Als Übung ziehe ich Daten aus einer API und Einfügen in eine PSQL-Datenbank. Ich folgte zunächst dem Standard-Limit von 1000 Einträgen pro Pull, entschied aber, dass ich versuchen wollte, alle Daten zu bekommen, die ungefähr 40K Reihen sind. Nach ein wenig Experimentieren, kann ich 4800, ziehen aber dann bekomme ich folgendes:Python KeyError: <pissewee.IntegerField object at ...> mit 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
ich angeschaut habe Die Tische online denken, es gab ein Problem mit einem Eintrag dort, aber ich kann nichts Offensichtliches finden. Danke für die Hilfe.
Wie fügen Sie die Antwortdatenfolge direkt in die Tabelle ein, ohne sie je nach Bedarf zu formatieren? Ist die Antwort garantiert eine Liste mit einem Datetime-Wert und zwei Ganzzahlen zurückgeben? – wave5459
Was meinen Sie, indem Sie es notwendigerweise formatieren? Ich verstehe, dass json.loads() ein Objekt zurückgibt, das in diesem Fall eine Liste von Wörterbüchern ist. Die API-Dokumentation sagt, dass die Felder ein Datums-/Uhrzeitfeld und zwei Zahlenfelder sind. Es ist einfach komisch, dass ich einen Tisch mit bis zu 4800 Zeilen bekomme und dann einen Fehler findet. –
Hier ist der Link zu Informationen über den Datensatz: https: //data.seattle.gov/Transportation/Fremont-Bridge-Hourly-Fahrrad-Counts-by-Month-Octo/65db-xm6k –