将字典列表作为json插入到SQLite单元格中,然后按原样将其恢复

xytpbqjk  于 2022-11-24  发布在  SQLite
关注(0)|答案(1)|浏览(114)

我需要在SQLite表格中的一个单元格中插入一个字典列表,并能够将其恢复为原样,-字典列表。有一个选项可以将其作为json字符串插入。SQLite接受它,但是返回一个“格式错误的节点或字符串”。我正在使用pycharm。尝试使用ast.literal_eval()转换为列表-同样的错误。为什么所有的括号和逗号在结尾?会有任何帮助。

import json, sqlite3, pprint

list1 = [{'id': '9', 'name': 'Buiding'},
         {'id': '10', 'name': 'Security'},
         {'id': '11', 'name': 'Mass Media'},
         {'id': '12', 'name': 'Consulting'},
         {'id': '13', 'name': 'Medical care'}]

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

c.executescript("DROP TABLE IF EXISTS result; CREATE TABLE result (data json)")
c.execute("insert into result values (?)", [json.dumps(list1)])
conn.commit()

a = c.execute("select json_extract (data, '$') FROM result;").fetchall()
conn.close()

pprint.pprint(a)

[('[{"id":"9","name":"Buiding"},{"id":"10","name":"Security"}, 
{"id":"11","name":"Mass Media"},{"id":"12","name":"Consulting"}, 
{"id":"13","name":"Medical care"}]',)]
k4aesqcs

k4aesqcs1#

不要使用json_extract!您可以通过JSON.dumps将dict作为字符串插入,然后将其作为字符串读回到str变量中,并通过JSON. loads解包。

import json, sqlite3, pprint

list1 = [{'id': '9', 'name': 'Buiding'},
         {'id': '10', 'name': 'Security'},
         {'id': '11', 'name': 'Mass Media'},
         {'id': '12', 'name': 'Consulting'},
         {'id': '13', 'name': 'Medical care'}]

conn = sqlite3.connect(':memory:')
c = conn.cursor()

c.executescript("DROP TABLE IF EXISTS countries; CREATE TABLE result (data json)")
c.execute("insert into result(data) values (?)", [json.dumps(list1)])
conn.commit()

a = json.loads(c.execute("select data FROM result;").fetchone()[0])
conn.close()

pprint.pprint(a == list1)

相关问题