2009-12-22 58 views
0

我正在處理一個web應用程序和數據庫,它處理以下 實體:計算機,計算機容器(computer_sets)和規則。它 一個防火牆管理工具。我遇到一些與 計算機對象有關的問題,因爲存儲在computer_set 中的那些計算機與計算機集中未包含的那些計算機不是同一個對象:computer_set中有一臺獨立的計算機,但一臺計算機可能是 computer_set電腦不能在規則,即只有容器是允許在一個規則(我知道,這是一個混亂,但我沒有 創建防火牆,我只是編程一個管理工具: )。SQLAlchemy查詢

我創建了一個數據庫(使用SQLite),我使用的是SQLAlchemy。於是,我創建了 類Computer,ComputerSet,ComputerSetComputer和Rule以及 對應的表 。 現在,在我的應用程序中,我需要列出所有這些計算機對象。 但是,當我查詢計算機表時,我得到Computer對象和 當我查詢我的computerset_computers表時,我得到ComputerSetComputer 對象。我希望得到一個查詢對象,其中包含我所有的電腦,不管它們是否屬於電腦組。這樣 的方式,我將能夠切片查詢對象並做分頁。有任何想法嗎?我可以更改我的數據庫設計,儘管我無法更改計算機的基本概念,例如Rule,.etc。

感謝您的時間, gsandorx :)

+0

你問在兩個包含「計算機」的表之間如何進行聯合?請爲您嘗試結合的內容提供相關代碼。 – 2009-12-22 02:15:33

+0

看起來像有人在郵件列表上回答你的問題。 – zzzeek 2009-12-22 03:27:20

+0

僅供參考:http://groups.google.com/group/sqlalchemy/browse_frm/thread/56af53ea50cd2578?hl=zh-CN – zzzeek 2009-12-22 03:28:07

回答

1

我看到兩個辦法來解決這個問題:使用工會在低級別的查詢或模型定義使用繼承。我認爲後者更方便,因爲您從查詢中獲取模型對象。假設您有ComputerBase抽象類和兩個子類別ComputerComputerSetComputer,session.query(ComputerBase).all()將返回所有ComputerComputerSetComputer對象的混合列表。