2009-09-04 60 views
0

我想在Django中集成遺留數據庫。Django和奇怪的遺留數據庫表

我遇到了一些可怕的數據庫設計造成的怪異表的問題,但我不能自由改變它。

的問題是,有一些沒有一個PrimaryKey的ID表,但在這裏,產品ID和,問題來了,他們中的很多都是多次在某列的情況下,需要有多個值,例如

ID | ... | namestring 

2 | ... | name1 
2 | ... | name2 

是否有可能繞過常見的主鍵行爲並編寫一個函數,該函數返回具有多行的此類ID的對象?列名稱字符串可以成爲一個列表。

有不需要手工編輯,因爲這是從另一個系統導出的數據,我只需要訪問它..

回答

2

Django的ORM會遇到麻煩與此表工作,除非你添加一個唯一的主鍵列。

如果您添加一個主鍵,那麼這將是微不足道的寫一個方法來查詢一個給定的產品ID,並返回對應於該產品ID值的列表。例如:

def names_for(product_id): 
    return [row.namestring for row in ProductName.objects.filter(product_id=product_id)] 

此函數也可以是自定義管理器方法或產品模型上的方法,或者對您最有意義的任何方法。

編輯:假設您有一個產品型號,該表中的product_id引用,並且唯一使用此表的是查找給定產品的這些名稱,您的另一種選擇是將此表完全從ORM中取出,只需在產品上編寫一個方法,即uses raw SQL and cursor.execute以獲取該產品的名稱。這是很好,乾淨,不需要添加一個獨特的PK到桌子上。丟失的主要原因是通過Django模型或管理員管理此表的能力。

+0

好的,謝謝,這似乎是一個合理的解決方案。我會很高興,但如果有一種方法可以通過管理器或類似方式繞過實際的對象訪問? – 2009-09-05 07:22:33