我有一个存储 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,))
首先将我的列表转换为字符串似乎很奇怪,有更好的方法吗?
最佳答案
将您的(key, listdata)
表替换为(key, index, listitem)
。表的唯一键变为 (key, index)
而不仅仅是 key
,并且您需要确保表中的索引集作为一致性条件对于任何给定的键都是从 0 开始连续的。
您可能也可能不需要区分列表为空的键和根本不存在的键。一种方法是有两个表(一个列表和一个它们的元素),这样一个空的但存在的列表自然地表示为列表表中的一行,而元素表中没有对应的行。另一种方法是捏造它并说带有 index=null
的行暗示该键的列表是空的。
请注意,如果(并且可能仅当)您想使用 SQL 对列表的元素进行操作(例如编写查询以提取表中每个列表的最后一个元素)时,这是值得的。如果您不需要这样做,那么将您的列表视为数据库中的不透明数据并不是完全不合理的。您只是失去了数据库“理解”它的能力。
剩下的问题就是如何最好地序列化/反序列化列表。 str/eval
完成了这项工作,但有点令人担忧。您可能会考虑 json.dumps
/json.loads
,对于整数列表,它是相同的字符串格式,但在解析器中有更多的安全限制。或者,如果空间有问题,您可以使用更紧凑的二进制表示。
关于python - 在 SQL 数据库中存储 Python 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18581571/