各位!!所以基本上我有这个问题。我正试图向巴西的zipcode API
发出请求,但数据是以JSON
格式显示的。我要做的是,从API
上获取这些信息,并将其放在SQLlite database
上。但是,不知怎的,我不知道怎么做。我尝试使用以下代码:
import requests
import sqlite3
import json
print('Identifying the ZIP CODE')
CEPC = input('Please type the zipcode:')
Requisicao = requests.get('https://viacep.com.br/ws/%7B%7D/json/%27.format(CEPC))
print(Requisicao.json())
#Database
con = sqlite3.connect('CEPS.db')
cur = con.cursor()
cur.execute('DROP TABLE IF EXISTS Requisicao')
cur.execute("CREATE TABLE Requisicao (cep int(8), data json)")
for Requisicao1 in Requisicao:
cur.execute("insert into Requisicao values (8, 5)",
[Requisicao1['cep'], json.dumps(Requisicao1)])
cur.commit()
cur.close()
当我尝试向API发出请求时,一切都正常,但当我尝试在数据库中插入数据时,我就是做不到。当涉及此代码部分时:
for or Requisicao1 in Requisicao:
cur.execute("insert into Requisicao values (8, 5)",
[Requisicao1['cep'], json.dumps(Requisicao1)])
It gives me the error: TypeError: byte indices must be integers or slices, not str.
zipcodes的示例有:09931080, 05565000
到zipcode示例的输出是:
{
"cep": "05565-000",
"logradouro": "Avenida General Asdrúbal da Cunha",
"complemento": "",
"bairro": "Jardim Arpoador",
"localidade": "São Paulo",
"uf": "SP",
"ibge": "3550308",
"gia": "1004",
"ddd": "11",
"siafi": "7107"
}
这是我尝试获取请求时的输出
问题中的代码有几个问题:
url无效:路径似乎在格式化之前已更改;然而,这可能是一个转录错误,否则会立即导致错误
代码在响应(
Requisicao
)上循环。这是对原始请求的操作,在这里没有用处。也许,目的是处理返回多个邮政编码的API?因为我们只有示例,所以不需要循环在查询语句中,
values (8, 5)
将导致在每一行中插入8
和5
。插入您提供的值(这称为参数替换)应该是values (?, ?)
应该提交连接,而不是游标
根据上述注释,插入代码如下所示:
您使用的URL似乎与here不匹配,因此我在下面的代码中替换了它
我还删除了循环,因为两个示例zipcode都没有返回多条记录-如果有zipcode返回多条记录,请添加一条
注意,要插入的数据需要是元组,而不是列表
此外,对于多个记录,您将使用
executemany
和元组列表相关问题 更多 >
编程相关推荐