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