我的Json数据包含以下(但更大)
{
"realms": [
{
"status": true,
"battlegroup": "Shadowburn",
"name": "Zuluhed",
"locale": "en_US",
"queue": false,
"connected_realms": [
"ursin",
"andorhal",
"scilla",
"zuluhed"
],
"timezone": "America/New_York",
"type": "pvp",
"slug": "zuluhed",
"population": "medium"
}
]
}
这是我的代码snipet应该将数据放入db文件 (json数据被加载到数据变量(data = json.loads(response)))
db=sqlite3.connect("temp.db")
c=db.cursor()
for record in data['realms']:
c.execute('INSERT INTO realms (status, name, queue, timezone, type, population) VALUES (?,?,?,?,?,?)', (record['status'], record['name'],record['queue'], record['timezone'],record['type'], record['population']))
运行脚本运行没有错误,但检查表的内容没有任何内容
# sqlite3 temp.db
SQLite version 3.8.2 2013-12-06 14:53:30
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT * FROM "realms";
sqlite>
sqlite> .tables
realms
sqlite>
我是json和sqlite的新手所以我认为我做错了。 感谢
答案 0 :(得分:2)
通过cursor
对象对数据库执行的任何更新在提交之前都不会生效。在您的情况下,您与数据库的连接称为db
(db=sqlite3.connect("temp.db")
),因此在db.commit()
命令后的某处需要INSERT
。
答案 1 :(得分:0)
您可以将整个json转储到sqlite,然后从数据库中提取并做您想做的任何事情。
db=sqlite3.connect("temp.db")
cur = db.cursor()
sql_create_data_table= """CREATE TABLE IF NOT EXISTS myrealms (
id integer PRIMARY KEY AUTOINCREMENT,
data json NOT NULL
); """
cur.execute(sql_create_data_table)
插入:
sql = '''INSERT INTO myrealms(data) VALUES(json('%s'))'''%json.dumps(response)
cur.execute(sql)
db.commit()
从数据库获取数据:
cur.execute("SELECT * FROM myrealms")
rows = cur.fetchall()
print(rows)