【问题标题】:How to store a dynamic python dictionary in MySQL database?如何在 MySQL 数据库中存储动态 python 字典?
【发布时间】:2015-11-26 07:44:57
【问题描述】:

我正在做一个关于网络爬虫+搜索引擎的小项目。我已经知道如何使用 Scrapy 框架抓取数据。现在我想做索引。为此,我发现 Python 字典对我来说是最好的选择。我希望映射类似于 对象的名称/标题(字符串) -> 对象本身(Python 对象)

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

非常感谢一些有关如何执行此操作的命令!

【问题讨论】:

  • NoSQL 数据库怎么样?
  • pyMongo 是一种简单的方法
  • @LawrenceBenson:你能简单说明一下吗?
  • @hd1:我不知道。如果你能多说一些,那会更有帮助。
  • 谢谢大家的回答!真的很感激!

标签: python mysql dictionary scrapy


【解决方案1】:

正如其他人已经指出的那样,在这种情况下,NoSQL 解决方案会更自然。既然我们谈论的是无模式字典,那么像 MongoDB 这样的 JSON 文档数据库将是一个不错的选择。

有一个scrapy-mongodb 包提供了一个进入 MongoDB 数据库的管道。

【讨论】:

    【解决方案2】:

    如果您想在数据库中存储动态数据,这里有几个选项。这真的取决于你需要什么。

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

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

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

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

    这些选项中的任何一个都可能是一把双刃剑。确保您已经阅读了您想要使用的任何选项的缺点,或者,在更多地研究选项时,也许您会找到更适合您和您的项目的东西。

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多