将数组插入sqlite3 python

Ami*_*ash 1 python sqlite list

我有一个列表/数组字符串:

l = ['jack','jill','bob']
Run Code Online (Sandbox Code Playgroud)

现在我需要在slite3中为python创建一个表,使用它可以将此数组插入名为"Names"的列中.我不希望每行中有多个每个名称的行.我想要一个包含完全如上所示的数组的行,我希望能够以完全相同的格式检索它.如何在数据库中插入数组作为元素?在创建db本身时,我应该将其声明为数组的数据类型?喜欢:

c.execute("CREATE TABLE names(id text, names ??)")
Run Code Online (Sandbox Code Playgroud)

我如何插入值?喜欢:

c.execute("INSERT INTO names VALUES(?,?)",(id,l))
Run Code Online (Sandbox Code Playgroud)

编辑:我是如此愚蠢.我刚刚意识到我可以为id创建多个条目,并使用查询来提取所有相关名称.不管怎么说,还是要谢谢你!

kra*_*nko 6

您可以将数组存储在单个字符串字段中,如果您以某种方式生成它的字符串表示形式,例如唱出pickle模块.然后,当您阅读该行时,您可以取消它.Pickle将许多不同的复杂对象(但不是全部)转换为字符串,可以恢复该对象.但是:这很可能不是你想要做的事情(除了选择行然后取消选择数组之外,你不能对表格中的数据做任何事情.你将无法搜索.

如果你想拥有不同长度(或固定长度,但许多类似事物的实例),你不希望将它放在一列或多列中.垂直,而不是水平,意思是:不要关于列,考虑行.对于存储具有任意数量组件的向量,表格是一个很好的工具.

从您提供的细节中解释起来有点困难,但您应该考虑创建第二个表并将所有名称放在第一个表的每一行.你的第一张桌子上需要一些钥匙,你也可以用在第二张桌子上:

c.execute("CREATE TABLE first_table(int id, varchar(255) text, additional fields)")
c.execute("CREATE TABLE names_table(int id, int num, varchar(255) name)")
Run Code Online (Sandbox Code Playgroud)

有了这个,你仍然可以存储你所拥有的任何信息,除了名称first_table和存储名称数组names_table,只需使用相同的idin first_tablenum存储数组内的索引位置.然后,您可以通过执行某些操作来取回阵列

SELECT name FROM names_table 
WHERE id=?
ORDER BY num
Run Code Online (Sandbox Code Playgroud)

读取任何行的名称数组first_table.

这是在数据库中存储数组的一种非常正常的方法.