我想从一堆XML文件中提取一些数据。我有一个工作的解析器/提取器,但我不能让它很好地坐在数据库中。
我正在尝试一个非常扁平的简单表来保存我的所有数据,并且将我的元素重新组合在一起太复杂了。
回头看看我正在尝试做什么,我构建了一个似乎符合要求的MySQL数据模型。它包含几个表,因此下一个任务是构建一个方法,将提取的数据放入适当的表中(检查重复值等)
我计划为每个数据块写一个泛型类,它将获取我呈现它的数据对象,转到相应的表,检查它是否已经存在,如果它不存在它也应该添加它表,并在第二个表中写入键值。如果确实存在,则必须回退键值,并将其写入第二个表。
我不确定如何用psuedo表示法来描述这个,但这看起来是一种明智的做法吗? 替代方案似乎是为每个数据块写一个特定的连接器/检查器/更新程序(并且我意味着在一个表中有一个或者n个具有适当主页的特定标记数据)。
答案 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。它们是用这种方法编写的。