首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python KeyError:<peewee.IntegerField对象at .>使用peewee insert_many()

Python KeyError:<peewee.IntegerField对象at .>使用peewee insert_many()
EN

Stack Overflow用户
提问于 2017-05-07 15:19:17
回答 1查看 408关注 0票数 1

作为练习,我从API中提取数据并将其插入psql数据库。最初,我遵循默认的每次拉1000条的限制,但是我决定尝试获取所有的数据,大约是40K行。经过一些实验,我可以得到4800,但我得到了以下内容:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

我看过网上的表格,认为那里的条目有问题,但我找不到任何明显的问题。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-08 17:56:48

我在本地尝试了您的代码(删除了应用程序令牌和4800限制),它如预期的那样工作:

代码语言:javascript
复制
  id  |        date         | fremont_bridge_sb | fremont_bridge_nb 
------+---------------------+-------------------+-------------------
    1 | 2017-01-09 06:00:00 |                28 |                55
    2 | 2017-01-04 20:00:00 |                19 |                10
    3 | 2017-01-18 13:00:00 |                18 |                18
    4 | 2017-01-06 11:00:00 |                22 |                15
    5 | 2017-01-27 11:00:00 |                39 |                38
    6 | 2017-01-08 14:00:00 |                 6 |                10
    7 | 2017-01-06 23:00:00 |                 8 |                 3
    8 | 2017-01-27 13:00:00 |                45 |                35
...

当我使用附加的限制运行它时,我注意到,API返回的行之一只包含一个date键(缺少fremont_bridge_nb和fremont_bridge_sb字段)。

Peewee要求大容量插入,每一行都有相同的键,所以问题是peewee期望找到所有3个键。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43833171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档