在SQL数据库中存储Python列表

时间:2013-09-02 22:28:32

标签: python sql

我有一个存储python列表的SQL数据库。目前我将列表转换为字符串,然后将其插入数据库(使用sqlite3),即。

foo = [1,2,3]
foo = str(foo)

#Establish connection with database code here and get cursor 'cur'

cur.execute("INSERT INTO Table VALUES(?, ?)", (uniqueKey, foo,))

首先将我的列表转换为字符串似乎很奇怪,有更好的方法吗?

2 个答案:

答案 0 :(得分:5)

将您的(key, listdata)表替换为(key, index, listitem)。表的唯一键变为(key, index)而不是key,并且您将要确保作为一致性条件,表中任何给定键的索引集从0开始是连续的。

您可能也可能不需要区分列表为空的键和根本不存在的键。一种方法是有两个表(列表中的一个,以及它们的一个元素),因此空的但现有的列表自然地表示为列表中的一行,而元素表中没有对应的行。另一种方法是捏造它,并说index=null行意味着该键的列表为空。

请注意,如果(并且可能仅当)您希望使用SQL对列表的元素进行操作(例如,编写查询以拉取表中每个列表的最后一个元素),这是值得的。如果您不需要这样做,那么将您的列表视为数据库中的不透明数据并非完全不合理。你只是失去了DB“理解”它的能力。

剩下的问题是如何最好地序列化/反序列化列表。 str/eval完成这项工作,但有点担心。您可以考虑json.dumps / json.loads,对于整数列表,它是相同的字符串格式,但在解析器中有更多的安全限制。或者,如果空间有问题,您可以使用更紧凑的二进制表示法。

答案 1 :(得分:0)

2种方式。

  1. 规范化表格,您需要为列表值设置新表格。所以你得到类似“TABLE list(id)”和“TABLE list_values(list_id,value)”的东西。

  2. 您可以序列化列表并放入一列。防爆。 Json,XML等(它在SQL中不是一个很好的实践)。