【发布时间】: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