将Json数据保存到Sqlite数据库中的Python代码

3

我试图保存从URL拉取的Json数据,但是我无法将它保存在SQLite数据库中。

Json:

{"Address":"ff00000a70d57128","Celsius":26.8125,"Fahrenheit":80.2625}

我查看了一些信息并从以下资源中获得灵感:

将json数据保存到sqlite 如何在Python中将JSON转换为SQLite - 如何正确地映射JSON键到数据库列?

import threading
import json
import urllib.request
import sqlite3

def tempRequest():
    # download raw json object
    url = "http://10.0.0.111:8080/getdevice?device=type28_1"
    data = urllib.request.urlopen(url).read().decode()

    # parse json object
    obj = json.loads(data)
    print(obj)

tempRequest()

conn = sqlite3.connect('test.db')
c = conn.cursor()

def create_table():
    c.execute("CREATE TABLE IF NOT EXISTS data(Celcius TEXT)")

def data_entry():
    c.executemany('INSERT INTO data (Celcius) ''VALUES (:Celcius)

    conn.commit()
    c.close()
    conn.close()

create_table()
data_entry()

当我运行这个程序时所得到的是:

TypeError(f'the JSON object must be str, bytes or bytearray, ' TypeError: the JSON object must be str, bytes or bytearray, not ellipsis

我试图更改:

obj = json.loads(data)

to

obj = json.loads(str(data))

但我认为问题出在我处理数据库方面,希望能得到一些建议。感谢!


当您调试 Python 脚本时,pdb 是您的好朋友。在您想要停下来的任何地方放置 import pdb; pdb.set_trace(),然后运行脚本即可。pdb 解释器会出现,您就可以像使用 Python 解释器一样检查变量,比如 data - Kei Minagawa
1个回答

5

这是我不久前写的一个概念证明,用于下载JSON股票数据并以行格式存储在SQLite中。

不同的数据,相同的概念。希望这能有所帮助。

import json
import urllib.request
import sqlite3
from os import path

stocks = ['AAPL', "MSFT"]

connection = sqlite3.connect("C:\\Projects\\AIFX\\Spikes\\Data\\Stocks.db")
cursor = connection.cursor()

for stock in stocks:

    url = "https://financialmodelingprep.com/api/v3/historical-price-full/" + stock
    data = urllib.request.urlopen(url).read().decode()

    obj = json.loads(data)

    for child in obj['historical']:
        print(child)

        cursor.execute("Insert into StockPrices values (?, ?, ?, ?, ?, ?, ?)", 
                       (child['date'], child['close'], child['high'], child['low'], 
                       child['open'], child['volume'], stock))
        connection.commit()

在SQLite中存储数据的表定义为:

CREATE TABLE "StockPrices" (
    "date"  TEXT,
    "close" INTEGER,
    "high"  INTEGER,
    "low"   INTEGER,
    "open"  INTEGER,
    "volume"    INTEGER,
    "symbol"    TEXT
);

JSON 的结构是:
{
  "symbol" : "AAPL",
  "historical" : [ {
    "date" : "2015-04-22",
    "open" : 126.99,
    "high" : 128.87,
    "low" : 126.32,
    "close" : 128.62,
    "adjClose" : 119.0,
    "volume" : 3.76545E7,
    "unadjustedVolume" : 3.76545E7,
    "change" : 1.63,
    "changePercent" : 1.284,
    "vwap" : 127.93667,
    "label" : "April 22, 15",
    "changeOverTime" : 0.01284
  }, {
    "date" : "2015-04-23",
    "open" : 128.3,
    "high" : 130.42,
    "low" : 128.14,
    "close" : 129.67,
    "adjClose" : 119.97,
    "volume" : 4.57709E7,
    "unadjustedVolume" : 4.57709E7,
    "change" : 1.37,
    "changePercent" : 1.068,
    "vwap" : 129.41,
    "label" : "April 23, 15",
    "changeOverTime" : 0.01068
  }
}

有一个 pandas.DataFrame.to_sql() 方法可以直接将雅虎金融股票数据存入数据库:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_sql.html - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接