2012-04-18 72 views
0

我想从一堆XML文件中提取一些数据。我有一个工作的解析器/提取器,但我无法让它很好地坐在数据库中。Python - 首先使用类 - 这是一个合适的方法吗?

我正在尝试一个非常平坦的简单表来容纳我所有的数据,而且这太复杂了,不能将我的元素拉回到一起。

回顾了我正在尝试做的事情之后,我构建了一个似乎符合法案的MySQL数据模型。它包含几个表格,所以下一个任务是建立一个方法,将提取的数据放入适当的表格(检查dup值等)

我计划为每个数据块编写一个泛型类,这会将我提交的数据对象,转到相应的表,检查它是否已经存在,如果它不应该将它添加到表中,并将键值写入第二个表中。如果它确实存在,那么简单的方法就是撤回键值,并将其写入第二个表格。

我不知道如何在伪代码中对此进行描述,但这看起来像是一个明智的方法吗? 另一种方法似乎是为每个数据块编写一个特定的连接器/检查器/更新器(并且我的意思是一个或n个特定的标记数据在一个表中具有适当的主页)。

+2

“这是一个很好的方法”对于堆栈溢出来说太开放和主观。 – agf 2012-04-18 05:54:18

+0

好的。指出。我没有具体的方法,我正在寻求一些建议,更多的是一个班会在这个广泛的场景中“工作”。我应该补充一点,我对如何使用类没有太清楚的了解,并且不想花时间尝试构建永远不会工作的东西......谢谢 – 2012-04-18 05:57:19

+0

您当然会使用类 - 基本上使用类一切都在Python中。虽然很好,但是你找到了一个可以工作的数据库模式,但你应该真正考虑使用SQLAlchemy,SQLObject等对象关系映射器(ORM),并设计类来建模数据,而不是设计数据库表。您正在重新发明轮子,尤其是如果您编写了自己的XML解析器。 – agf 2012-04-18 05:59:51

回答

1

你使用任何ORM吗?如果不是,这是个好主意。

一般的方法是好的,但尝试使用一些泛型类来实现它。 IE浏览器。你的实现可以类似于:

class NodeSaver(object): 
    def __init__(self, node): 
     self.node = node 

    def save(self, connection=default_connection): 
     object = self.get_or_insert_to_first_table() 
     self.insert_to_second_table(object) 

    def get_or_insert_to_first_table(self): 
     search_values = self.get_search_values() 
     main_table = self.get_main_table() 
     objects = main_table.objects.filter(**search_values) # notation from Django ORM 
     if objects.exists(): 
      return objects[0] 
     else: 
      insert_values = {} 
      insert_values.update(search_valuse) 
      insert_values.update(self.get_insert_values()) 
      return main_table.objects.create(**insert_values) 

    def get_or_insert_to_second_table(self): 
     ... 

    def get_main_table(self): 
     return self.main_table 

    def get_second_table(self): 
     return self.second_table 

class MyDataLumpSaver(NodeSaver): 
    main_table = models.MyData 
    second_table = models.OtherData 

    def get_search_values(self): 
     # 

    def get_insert_values(self): 
     # 

像这样的类哟可以通过重写某些方法来扩展这些数据块。如果你喜欢这个想法,看看Django基于类的视图。他们是用这种方法写的。

+0

哇!我非常感谢你在这个答复中的时间。谢谢。我需要一段时间才能理解它,并理解它的意义/作用。很可能有些部分会超出我的头(对不起!),因为我说过我以前从来没有试过实施过课程,也没有看过ORM - 它的所有真正的好东西,我很感激你的时间。 – 2012-04-18 06:39:19

相关问题