Python - 首先使用类 - 这是一种合适的方法吗?

时间:2012-04-18 05:49:15

标签: python class mysql-python

我想从一堆XML文件中提取一些数据。我有一个工作的解析器/提取器,但我不能让它很好地坐在数据库中。

我正在尝试一个非常扁平的简单表来保存我的所有数据,并且将我的元素重新组合在一起太复杂了。

回头看看我正在尝试做什么,我构建了一个似乎符合要求的MySQL数据模型。它包含几个表,因此下一个任务是构建一个方法,将提取的数据放入适当的表中(检查重复值等)

我计划为每个数据块写一个泛型类,它将获取我呈现它的数据对象,转到相应的表,检查它是否已经存在,如果它不存在它也应该添加它表,并在第二个表中写入键值。如果确实存在,则必须回退键值,并将其写入第二个表。

我不确定如何用psuedo表示法来描述这个,但这看起来是一种明智的做法吗? 替代方案似乎是为每个数据块写一个特定的连接器/检查器/更新程序(并且我意味着在一个表中有一个或者n个具有适当主页的特定标记数据)。

1 个答案:

答案 0 :(得分: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 Class Based Views。它们是用这种方法编写的。