0

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

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

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

我计划为每个数据块编写一个通用类,它将获取我提供的数据对象,转到相应的表,检查它是否已经存在,如果不存在,它应该将它添加到表中,然后写第二个表中的键值。如果它确实存在,它必须简单地拉回键值,并将其写入第二个表。

我不确定如何用伪符号来描述这一点,但这看起来是一种明智的方法吗?另一种方法似乎是为每个数据块编写一个特定的连接器/检查器/更新器(我所说的块是指一个或 n 个特定标记数据,它们在一个表中具有适当的主页)。

4

1 回答 1

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。它们是用这种方法编写的。

于 2012-04-18T06:04:25.757 回答