我有一个SQL数据库,我存储python列表.目前我将列表转换为字符串,然后将其插入数据库(使用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,))
Run Code Online (Sandbox Code Playgroud)
将我的列表首先转换为字符串似乎很奇怪,有更好的方法吗?
用你的(key, listdata)桌子替换(key, index, listitem).表的唯一键变为(key, index)而不仅仅是key,并且您将要确保作为一致性条件,表中任何给定键的索引集从0开始是连续的.
您可能也可能不需要区分列表为空的键和根本不存在的键.一种方法是有两个表(列表中的一个,以及它们的一个元素),因此空的但现有的列表自然地表示为列表中的行,而元素表中没有对应的行.另一种方法是捏造它并说一行index=null意味着该键的列表是空的.
请注意,如果(并且可能仅当)您希望使用SQL对列表的元素进行操作(例如,编写查询以拉取表中每个列表的最后一个元素),这是值得的.如果您不需要这样做,那么将列表视为数据库中的不透明数据并非完全不合理.你只是失去了DB"理解"它的能力.
剩下的问题是如何最好地序列化/反序列化列表.str/eval做的工作,但有点担心.你可能会考虑json.dumps/ json.loads,对于整数列表,它是相同的字符串格式,但在解析器中有更多的安全限制.或者,如果空间有问题,您可以使用更紧凑的二进制表示.
| 归档时间: |
|
| 查看次数: |
3741 次 |
| 最近记录: |