【问题标题】:Json data into one sqlite field with Python 3使用 Python 3 将 Json 数据放入一个 sqlite 字段
【发布时间】:2016-09-16 14:31:15
【问题描述】:

我正在使用他们的 api 从网站中提取数据。然后我想将数据保存到数据库中。对于某些字段,我需要保存一部分提取到一个字段中的 json 数据。

表格布局是这样创建的:

cur.execute('create table if not exists KillData(KillID INT, Victim TEXT, KillTime TEXT, System INT,'
            ' Attackers TEXT, Items TEXT, Price REAL)')

这就是我现在要插入的数据:

for kill_mail in response:
    kill = KillMail(kill_mail)
    cur.execute("insert into KillData values(?, ?, ?, ?, ?, ?, ?)",
                (int(kill.get_kill_id()), kill.get_victim(), kill.get_kill_time(), kill.get_system(),
                 kill.get_attackers, kill.get_items(), kill.get_price()))

其中 KillMail 只是一个用于获取 json 数据中某些值的类。 例如:

class KillMail:
def __init__(self, json_kill_mail):
    self.json_kill_mail = json_kill_mail

def get_attackers(self):
    return json.dumps(self.json_kill_mail['attackers'])

def get_items(self):
    return json.dumps(self.json_kill_mail['items'])

kill.get_attackers 和 kill.get_items() 包含其中的项目,因为可能只有一个攻击者/项目或多达 100 个或更多。这就是为什么我认为将数据以 json 格式保存为字符串是最好的,这样在拉取它时我可以 json.load() 重建 json 对象以从中提取信息。

我在运行代码时遇到的错误是:

主要 kill.get_attackers, kill.get_items(), kill.get_price())) sqlite3.InterfaceError: Error binding parameter 4 - 可能是不支持的类型。

我在网上唯一能找到的就是this

我尝试了该帖子中的建议,但似乎没有任何效果。 我也尝试将这两个字段更改为 BLOB,但出现了同样的错误。

所以我的问题是:如何将 json 格式的字符串保存到一个字段中?

如果需要,我可以发布更多信息。

【问题讨论】:

  • 嗯。对于初学者,要保存 json 格式的字符串,您需要将 json 格式的字符串传递给它str() 不是 json 格式的东西,json.dumps 是。这不是您的问题,但请检查查询中“参数 1”的类型,它看起来是 kill.get_victim()
  • 谢谢。我更新了帖子以纠正这些错误。该错误现在返回参数 4 而不是 1,因为我使用了您的建议,它解决了参数 1 的问题。
  • 参数4为kill.get_attackers,是一个函数,不是函数调用的结果。

标签: python json python-3.x sqlite


【解决方案1】:

所以,看来这是我的错字。对于表设置,有一组 '' 不应该在那里。如果你把它放在一行而不是像我这样的两行,表格设置看起来像这样:

cur.execute('create table if not exists KillData(KillID INT, Victim TEXT, Attackers TEXT, Items Text,'' KillTime TEXT, System INT, Price REAL)')

因此,通过在 KillTime 之前删除 '',错误不再发生并且代码可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 2015-10-31
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多