我有一个字符串列表/数组:
l = ['jack','jill','bob']
现在我需要在slite3中为python创建一个表,我可以使用该表将此数组插入名为“Names”的列中。我不希望每行中有多个每个名称的行。我想要一个包含完全如上所示的数组的行,我希望能够以完全相同的格式检索它。如何在数据库中插入数组作为元素?在创建db本身时,我应该将其声明为数组的数据类型?像:
c.execute("CREATE TABLE names(id text, names ??)")
我如何插入值?像:
c.execute("INSERT INTO names VALUES(?,?)",(id,l))
编辑:我是如此愚蠢。我刚刚意识到我可以为id创建多个条目,并使用查询来提取所有相关名称。不管怎样,谢谢!
答案 0 :(得分: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)")
使用此功能,您仍然可以存储除first_table
中的名称之外的任何信息,并将名称数组存储在names_table
中,只需使用与id
中相同的first_table
}和num
将索引位置存储在数组中。然后,您可以通过执行类似
SELECT name FROM names_table
WHERE id=?
ORDER BY num
读取first_table
中任何行的名称数组。
这是在数据库中存储数组的一种非常正常的方法。
答案 1 :(得分:1)
这不是要走的路。您应该考虑为具有名称的外键的名称创建另一个表。
答案 2 :(得分:1)
你可以pickle / marshal / json你的数组并将它存储为数据库中的binary / varchar / jsonfield。
类似的东西:
import json
names = ['jack','jill','bill']
snames = json.dumps(names)
c.execute("INSERT INTO nametable " + snames + ";")