Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
将数组插入sqlite3 python_Python_Sqlite_List - Fatal编程技术网

将数组插入sqlite3 python

将数组插入sqlite3 python,python,sqlite,list,Python,Sqlite,List,我有一个字符串列表/数组: l = ['jack','jill','bob'] 现在我需要在slite3中为python创建一个表,使用该表我可以将该数组插入到名为“Names”的列中。我不希望每行中有多个名称的行。我想要一个包含数组的单行,完全如上图所示,并且我希望能够以完全相同的格式检索它。如何将数组作为元素插入数据库中?在创建db本身时,我应该声明什么作为数组的数据类型?比如: c.execute("CREATE TABLE names(id text, names ??)") 如何也

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

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条目,并使用一个查询来提取所有相关的名称。无论如何谢谢你

这不是办法。您应该考虑为外键名称创建另一个表。

您可以在数组中选取/封送/ JSON并将其存储为二进制/ VARCHAR/JSONFAR。 比如:

import json

names = ['jack','jill','bill']
snames = json.dumps(names)
c.execute("INSERT INTO nametable " + snames + ";")

如果以某种方式生成数组的字符串表示形式,例如,使用
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)")
使用此功能,您仍然可以存储除
第一个\u表中的名称以外的任何信息,并将名称数组存储在
名称表中
,只需使用与
第一个\u表中相同的
id
num
来存储数组中的索引位置。然后,您可以通过执行som来获取数组像

SELECT name FROM names_table 
WHERE id=?
ORDER BY num
要读取
第一个\u表中任何行的名称数组


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

您的用例是什么?插入的文本是否可以选择?对于大多数用例,您尝试执行的操作是一个坏主意。是的,我需要在将列表放入数据库后能够选择列表。然后,您正在执行的操作完全属于坏主意类别,您应该使用单独的t能够输入名称,并使用多对多关系模式。