2012-04-18 66 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

相關問題