如何在MySQL数据库中存储动态python字典?

时间:2015-09-01 06:58:21

标签: python mysql dictionary scrapy

我在Web-Crawler + Search-Engine上做了一个迷你项目。我已经知道如何使用Scrapy框架抓取数据。现在我想做索引。为此,我发现Python字典对我来说是最好的选择。我希望映射类似于对象的名称/标题(字符串) - > 对象本身(Python对象)

现在问题是我不知道如何在MySQL数据库中存储动态字典,我肯定想存储这个字典!

非常感谢关于如何做到这一点的一些命令!

2 个答案:

答案 0 :(得分:1)

正如其他人已经指出的那样,在这种情况下,NoSQL解决方案会更自然。由于我们讨论的是无模式字典 - 像MongoDB这样的JSON文档数据库非常合适。

有一个scrapy-mongodb包,它为MongoDB数据库提供了一个管道。

答案 1 :(得分:1)

如果要将动态数据存储在数据库中,可以使用以下几个选项。这真的取决于你需要什么。

首先,您可以使用NoSQL解决方案,例如MongoDB。 NoSQL允许您在没有显式数据模式的情况下将非结构化数据存储在数据库中。这是一个非常大的话题,提供的指南/信息要比我提供的要好得多。但是,NoSQL可能不适合您项目的其余部分。

其次,如果可能,您可以切换到PostgreSQL,并使用它的HSTORE列(在MySQL中不可用)。 HSTORE列旨在存储一组键/值对。此列类型支持BTREE,GIST,GIN和HASH索引。您需要确保熟悉PostgreSQL,以及它与MySQL的区别。您的某些其他SQL可能不再像您期望的那样工作。

第三,您可以序列化数据,然后存储序列化实体。我想到了jsonpickle。这种可行性和可靠性当然取决于你的词典有多复杂。序列化数据,特别是使用pickle可能很危险,因此请确保从安全角度熟悉其工作原理。

第四,使用“实体 - 属性 - 值”表。这模仿了词典“关键/价值”配对。实际上,您创建了一个包含三列“Related_Object_ID”,“Attribute”,“Value”的新表。您丢失了通常在表中获得的大量对象元数据,并且SQL查询会变得更加复杂。

任何这些选项都可以成为双刃剑。确保你已经了解了你想要使用的任何选项的垮台,或者,在更多地考虑选项时,也许你会找到更适合你和你的项目的东西。