如何使用python 3将特定的json插入sqlite数据库

Jef*_*f F 5 python sqlite json python-3.x

使用 python 3,我想下载 API 数据,该数据以 JSON 形式返回,然后我想仅将特定的(列或字段或其他?)插入到 sqlite 数据库中。所以,这就是我所得到的和我遇到的问题:

使用python的请求模块:

##### import modules

import sqlite3
import requests
import json

headers = {
'Authorization' : 'ujbOsdlknfsodiflksdonosB4aA=',
'Accept' : 'application/json'
}
r = requests.get(
'https://api.lendingclub.com/api/investor/v1/accounts/94837758/detailednotes',
 headers=headers
 )
Run Code Online (Sandbox Code Playgroud)

好的,第一个问题是如何将请求的 JSON 数据放入 python 可以使用的东西(字典?)中。就是它...

jason.loads(r.text)
Run Code Online (Sandbox Code Playgroud)

然后我创建要插入特定数据的表:

curs.execute('''CREATE TABLE data(
loanId INTEGER NOT NULL,
noteAmount REAL NOT NULL,
)''')
Run Code Online (Sandbox Code Playgroud)

没问题...但是现在,即使 JSON 数据看起来像这样(尽管有数百条记录)...

{
"myNotes": [
{
    "loanId":11111,
    "noteId":22222,
    "orderId":33333,
    "purpose":"Debt consolidation",
    "canBeTraded":true,
    "creditTrend":"DOWN",
    "loanAmount":10800,
    "noteAmount":25,
    "paymentsReceived":5.88,
    "accruedInterest":12.1,
    "principalPending":20.94,
},
{
    "loanId":11111,
    "noteId":22222,
    "orderId":33333,
    "purpose":"Credit card refinancing",
    "canBeTraded":true,
    "creditTrend":"UP",
    "loanAmount":3000,
    "noteAmount":25,
    "paymentsReceived":7.65,
    "accruedInterest":11.92,
    "principalPending":19.76,
}]
}
Run Code Online (Sandbox Code Playgroud)

我只想将 2 个数据点插入 sqlite 数据库,即“loanId”和“noteAmount”。我相信将数据插入数据库会看起来像这样(但知道这是不正确的):

curs.execute('INSERT INTO data (loanId, noteAmount) VALUES (?,?)', (loanID, noteAmount))
Run Code Online (Sandbox Code Playgroud)

但我现在完全不知道如何做到这一点,所以我想我有两个主要问题;将下载的数据转换为Python可以使用的东西,然后将特定数据插入数据库;然后我到底如何将数据从保存下载数据的对象插入数据库。我猜循环是答案的一部分......但是从什么开始呢?提前致谢!

fpb*_*bhb 2

正如文档所说:

sqlite3模块支持两种占位符:问号(qmark样式)和命名占位符(named样式)。

请注意,您甚至可以使用 一次插入所有行executemany。所以在你的情况下:

curs.executemany('INSERT INTO data (loanId, noteAmount) '
                 'VALUES (:loanId,:noteAmount)', json.loads(...)['myNotes'])
Run Code Online (Sandbox Code Playgroud)