Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表插入SQLite3单元格_Python_Sqlite - Fatal编程技术网

Python 将列表插入SQLite3单元格

Python 将列表插入SQLite3单元格,python,sqlite,Python,Sqlite,我是python新手,甚至是SQL新手,刚刚遇到以下问题: 我想将一个列表(或者实际上是一个包含一个或多个词典的列表)插入到SQL数据库的单个单元格中。这是我的一行数据: [a,b,c,[{key1: int, key2: int},{key1: int, key2: int}]] 由于列表中字典的数量不同,我希望稍后遍历列表中的元素,因此我认为将其保留在一个位置是有意义的(这样就不会将列表拆分为单个元素)。但是,在尝试按原样插入列表时,出现以下错误: sqlite3.InterfaceErr

我是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没有“嵌套”列的功能;您必须将列表存储为文本或二进制数据blob;输入时序列化,输出时再次反序列化

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

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

import json
import sqlite

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\u types=sqlite3.解析DECLTYPES
并将列类型声明为
json
,或者使用
detect\u types=sqlite3.解析COLNAMES
并在列别名中使用
[json]
从…
中选择datacol作为“datacol[json]”)加载时触发转换。

是否可以将列表转换为字符串格式?例如JSON?您应该显示插入代码。使用SQLite,您可以将其存储为文本字符串,这对于存储来说是可以的,但如果您希望稍后使用SQL查询数据,例如特定的键值,则这不是执行此操作的方法。