5

我有一个很简单的问题。我正在尝试从在线资源中提取 JSON,并将其存储在 SQLite 表中。除了将数据存储在一个丰富的表中,对应于 JSON 中的许多字段,我还想在每次拉取时将整个 JSON 转储到一个表中。

该表如下所示:

CREATE TABLE Raw_JSONs (ID INTEGER PRIMARY KEY ASC, T DATE DEFAULT (datetime('now','localtime')), JSON text);

我使用以下 python 代码从某个 URL 中提取了一个 JSON:

from pyquery import PyQuery
from lxml import etree
import urllib

x = PyQuery(url='json')
y = x('p').text()

现在,我想执行以下 INSERT 命令:

import sqlite3

db = sqlite3.connect('a.db')
c = db.cursor()

c.execute("insert into Raw_JSONs values(NULL,DATETIME('now'),?)", y)

但有人告诉我,我提供了不正确的数字绑定(即数千,而不仅仅是 1)。我收集它正在读取 y 变量作为 JSON 的所有不同元素。

有人可以帮我完整地存储 JSON 吗?

此外,由于我显然是这个 JSON 游戏的新手,任何推荐的在线资源都会很棒。

谢谢!

4

2 回答 2

7

.execute()期望一个序列,最好给它一个单元素元组:

c.execute("insert into Raw_JSONs values(NULL,DATETIME('now'),?)", (y,))

Python 字符串也是一个序列,是单个字符之一。因此,该.execute()调用尝试将每个单独的字符视为查询的参数,除非您的字符串短一个字符,否则这意味着它不会提供正确数量的参数。

不要忘记提交您的插入:

db.commit()

或使用数据库连接作为上下文管理器:

with db:
    # inserts executed here will automatically commit if no exceptions are raised.
于 2013-07-06T17:33:11.643 回答
2

您可能也有兴趣了解内置的 sqlite 模块适配器。这些可以两种方式将任何 python 对象转换为 sqlite 列。请参阅标准文档和适配器部分。

于 2013-07-06T17:48:29.780 回答