我有一个字符串列表/数组:
l = ['jack','jill','bob']
现在我需要在 slite3 中为 python 创建一个表,使用它我可以将这个数组插入到名为“Names”的列中。我不希望每行中的每个名称都有多个行。我想要一行包含与上面所示完全相同的数组,并且我希望能够以完全相同的格式检索它。如何将数组作为元素插入数据库中?在创建数据库本身时,我应该将什么声明为数组的数据类型?喜欢:
c.execute("CREATE TABLE names(id text, names ??)")
我如何也插入值?喜欢:
c.execute("INSERT INTO names VALUES(?,?)",(id,l))
编辑:我太愚蠢了。我刚刚意识到我可以为 id 设置多个条目,并使用查询来提取所有相关名称。无论如何谢谢!
最佳答案
如果您以某种方式生成它的字符串表示形式,例如,您可以将数组存储在单个字符串字段中。唱 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
中任何行的名称数组。
这是在数据库中存储数组的一种非常正常的方式。
关于python - 将数组插入sqlite3 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542930/