gpt4 book ai didi

python - 将列表插入 SQLite3 单元格

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:29 25 4
gpt4 key购买 nike

我是 python 新手,甚至是 SQL 新手,刚刚遇到以下问题:

我想将一个列表(或者实际上是一个包含一个或多个字典的列表)插入到我的 SQL 数据库中的单个单元格中。这是我的一行数据:

[a,b,c,[{key1: int, key2: int},{key1: int, key2: int}]]

由于列表中的字典数量各不相同,并且我想稍后遍历列表的元素,因此我认为将其保留在一个位置是有意义的(因此不会将列表拆分为单个元素)。但是,当尝试按原样插入列表时,出现以下错误:

sqlite3.InterfaceError: Error binding parameter 2 - probably unsupported type.

如何将这种列表插入到我的 SQL 数据库的单个单元格中?

最佳答案

SQLite 没有“嵌套”列的功能;您必须将列表存储为文本或二进制数据 block ;在传入时对其进行序列化,在传出时再次反序列化。

如何序列化为文本或二进制数据取决于您的用例。如果您的列表和字典仅包含文本、数字、 bool 值和 None(字典仅使用字符串作为键),则 JSON(通过 json module )可能适合。 JSON 受到多种其他语言的支持,因此您可以保持数据的合理兼容性。或者您可以使用pickle ,它允许您序列化为二进制格式,并且可以处理 Python 可以抛出的几乎任何内容,但它是 Python 特有的。

然后您可以 register an adapter处理序列化格式和 Python 列表之间的转换:

import json
import sqlite3

def adapt_list_to_JSON(lst):
return json.dumps(lst).encode('utf8')

def convert_JSON_to_list(data):
return json.loads(data.decode('utf8'))

sqlite3.register_adapter(list, adapt_list_to_JSON)
sqlite3.register_converter("json", convert_JSON_to_list)

然后使用 detect_types=sqlite3.PARSE_DECLTYPES 连接并将列类型声明为 json,或者使用 detect_types=sqlite3.PARSE_COLNAMES 并使用 [json] 在列别名中 (SELECT datacol AS "datacol [json]"FROM ...) 以在加载时触发转换。

关于python - 将列表插入 SQLite3 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48467144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com