【问题标题】:Insert data into sqlite3 database with API使用 API 将数据插入 sqlite3 数据库
【发布时间】:2019-08-11 00:25:40
【问题描述】:

我正在尝试将来自 Web API 的数据插入到我的数据库中(我在 python 3.7.2 上使用 sqlite3),但我找不到任何有关如何操作的教程。到目前为止,我所有的代码都是:

import requests, sqlite3
database = sqlite3.connect("ProjectDatabase.db")
cur = database.cursor()

d = requests.get("http://ergast.com/api/f1/2019/drivers")

我的目标是获取每个驱动程序的名称和驱动程序编号,并将它们全部插入一个名为 Drivers 的表中。 (我也在使用更多的 API 和更多的表,但如果我知道如何做一个,那么剩下的应该没问题。)我假设我必须做类似的事情

cur.execute('''INSERT INTO Drivers VALUES(?,?), (driverName, driverNumber)
''')

但我正在努力弄清楚如何将数据从网站直接插入到表格中。有谁知道如何做到这一点?谢谢

【问题讨论】:

  • 是否需要解析 XML 输出?此特定 API 支持 JSON 响应。
  • 尝试只从网站上获取名称,而不先将它们放入数据库中。
  • 你猜对了。正常的方式有 3 个步骤:1/ 获取数据 2/ 解析数据 3/ 将相关部分插入数据库。
  • 我不太明白你在哪里难以诚实。基本上是这样的:request -> parse -> insert你在什么时候挣扎?
  • @LukaszSalitra 我不知道,我使用了“requests.get()”,这就是它自动给我的。如果需要 JSON,那很好,我只需要弄清楚如何获取 JSON 响应而不是 XML。

标签: python-3.x sqlite python-requests sql-insert


【解决方案1】:

正如 OP 中的评论部分所述,问题似乎是如何解析 API 点。

d = requests.get("http://ergast.com/api/f1/2019/drivers.json")
d = d.json()
drivers = d["MRData"]["DriverTable"]["Drivers"]

将是访问该 API 提供的所有驱动程序的问题的答案。

要将条目添加到数据库中,您可以使用以下命令:

for dr in drivers:
    name = dr["familyName"]
    number = dr["permanentNumber"]
    sql = 'INSERT INTO Drivers (name,number) VALUES(?,?)'
    val = (name,number)
    cur.execute(sql,val)

使用此解决方案,您不必使用指定索引,可以直接访问您感兴趣的参数。

【讨论】:

  • 我已将循环编辑为答案。您基本上可以将发布的答案放入您的代码中,不需要太多编辑,当然除了数据库连接和光标创建。
  • 谢谢,我试过用这个,但它抛出一个错误,说没有这样的列“name”(它不与“driverName”或[与“number”相同]) -我试图指定要输入数据的列,但它仍然会引发此错误。
  • @Grace 您是否更改了网址并添加了drivers = d["MRData"]["DriverTable"]["Drivers"] 部分?如果您复制了完整的答案,它应该可以工作。
  • 我有,我刚刚仔细检查过,和你的一样。
  • @Grace 是的,我刚刚看到我已经搞砸了 sql 语句,这样它应该可以工作并且我通常会这样做。注意:在 sql 语句中,我命名了要添加的列,在我的测试数据库中,列名是名称和编号。
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 2011-12-21
  • 2021-08-05
  • 2021-10-25
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多