在Django中将Python集合存储到数据库
我需要把一个Python的集合存储到数据库里,以便以后使用。有什么好的方法吗?我最开始的想法是用模型中的一个文本字段,把集合存成用逗号或管道符分隔的字符串。然后当我需要把它取出来在我的应用里用的时候,可以通过对这个字符串调用split来初始化一个集合。显然,如果有简单的方法可以把集合序列化存到数据库里,这样我以后需要用的时候可以直接把它取出来作为集合,那就最好不过了。
4 个回答
1
Redis 本身就能存储集合(还有其他数据结构,比如列表、字典、队列),并且提供集合操作,而且速度非常快。我觉得它就像是Python开发的瑞士军刀。
我知道它并不是传统意义上的关系型数据库,但它确实很简洁地解决了这个问题。
2
这里有几个选择,具体取决于你想在集合中存储什么类型的数据。
如果是普通的整数,CommaSeparatedIntegerField 可能会很好用,不过我觉得这种存储方式有点笨重。
如果是其他类型的Python对象,你可以尝试在保存到数据库之前先对它进行序列化,然后在再次加载时再进行反序列化。这听起来是个不错的方法。
不过,如果你想在数据库中存储一些人类可读的内容,你甚至可以将数据转成JSON格式,放到一个TextField里,只要你存储的数据不包含Python对象就可以。
4
如果你的数据库更擅长存储二进制数据块,你可以使用pickle来处理你的集合。实际上,pickle 默认会把数据存储为文本,所以这可能比用分隔符的字符串方式更好。你只需要用pickle.dumps(your_set)来保存你的集合,然后在需要的时候用unpickled = pickle.loads(database_string)来读取它。