数据提取和存储之间的层

时间:2015-03-04 14:52:28

标签: python python-2.7 python-3.x dictionary

我在做什么:

  1. 以字典的形式从数据源获取数据(可以来自API或抓取)
  2. 清理/操纵某些字段
  3. 将数据源字典中的字段合并到表示对象的新字典
  4. 将创建的词典保存到数据库
  5. 有没有pythonic方法来做到这一点?我想知道整个过程,但我会提出一些指导性问题:

    1. 我应该上几节课?
    2. 从数据源到对象的字段清理应该使用哪些方法/类?
    3. 从数据源到对象的字段组合/映射应该是哪些方法/类?
    4. 如果抓取与api的方法不同,请解释如何以及为什么

      以下是一个例子:

      API返回:

       {data: {
           name: "<b>asd</b>",
           story: "tame",
           story2: "adjet"
           }
       }
      

      你想做什么:

      1. 清洁名称
      2. 创建name_story对象
      3. 设置name_story.name = dict [&#39;数据&#39;] [&#39;名称&#39;]
      4. 设置name_story.story = dict [&#39;数据&#39;] [&#39;故事&#39;] + dict [&#39;数据&#39;] [&#39; story2&#39; ]
      5. 将name_story保存到数据库
      6. (并考虑可以创建多个对象和多个传入数据源)

        你将如何构建这个过程?所有类/方法的界面对我来说都足够了,没有任何解释。

1 个答案:

答案 0 :(得分:1)

  

我应该上几节课?

在Python中,没有必要使用类。类是管理复杂性的方法。如果您的解决方案不复杂,请使用函数(或者,如果是一次性解决方案,可以使用模块级代码)

  

如果抓取与api的方法不同,请解释如何以及为什么

我更喜欢用modularityprinciple of least knowledge来组织我的代码,并在模块系统的各个部分之间定义清晰的接口。

模块化解决方案的示例

您可以使用模块(函数或类)来获取信息,它应该返回包含指定字段的字典,无论它究竟是什么。

另一个模块也应该处理字典并返回字典(例如)。

第三个模块可以将该字典中的信息保存到数据库中。

很有可能,这个计划远非您需要或想要的,您应该自己开发模块系统。

关于你的需求的一些话:

  

清洁名称

考虑这个stackoverflow answer

  

创建一个name_story对象

     

设置name_story.name = dict['data']['name']

     

设置name_story.story = dict['data']['story'] + dict['data']['story2']

如果你想通过点访问对象的属性(正如你在3和4项中指定的那样,你可以使用python namedtuple或普通的python类。如果索引访问对你来说没问题,可以使用python dictionary

对于namedtuple,它将是:

from collections import namedtuple
NameStory = namedtuple('NameStory', ['name', 'story'])
name_story1 = NameStory(name=dict['data']['name'], story=dict['data']['story'] + dict['data']['story2'])
name_story2 = NameStory(name=dict2['data']['name'], story=dict2['data']['name'])

如果你选择了字典,那就更容易了:

name_story = {
    'name': dict['data']['name'], 
    'story': dict['data']['story'] + dict['data']['story2'],
}
  

将name_story保存到数据库

这是一个更复杂的问题。

您可以使用原始SQL。具体说明取决于您的数据库。 Google for&#39; python sqlite&#39;或者&#39; python postgresql&#39;或者你想要什么,有很多很好的教程。

或者您可以使用python ORM之一:

顺便说一下

强烈建议不要覆盖python内置类型(listdictstr等),就像在此行中所做的那样:

name_story.name = dict['data']['name']