在此先感謝您的幫助。SQLAlchemy:單向關係,相關子查詢
我有兩個實體,人類和黑猩猩。每個都有一組度量標準,它們可以包含MetricBlock的子類,例如CompleteBloodCount(字段WHITE_CELLS,RED_CELLS,PLATELETS)。
所以我的對象模型看起來像(原諒ASCII藝術):
--------- metrics --------------- ----------------------
| Human | ----------> | MetricBlock | <|-- | CompleteBloodCount |
--------- --------------- ----------------------
^
--------- metrics |
| Chimp | --------------
---------
這是通過下面的表格來實現:
Chimp (id, …)
Human (id, …)
MetricBlock (id, dtype)
CompleteBloodCount (id, white_cells, red_cells, platelets)
CholesterolCount (id, hdl, ldl)
ChimpToMetricBlock(chimp_id, metric_block_id)
HumanToMetricBlock(human_id, metric_block_id)
所以人都知道它的度量塊,但度量塊不知道它的人類或黑猩猩。
我想在SQLAlchemy中編寫一個查詢來查找特定人類的所有CompleteBloodCounts。在SQL我可以寫這樣的東西:
SELECT cbc.id
FROM complete_blood_count cbc
WHERE EXISTS (
SELECT 1
FROM human h
INNER JOIN human_to_metric_block h_to_m on h.id = h_to_m.human_id
WHERE
h_to_m.metric_block_id = cbc.id
)
我很努力,雖然寫在SQLAlchemy。我認爲correlate(),any()或別名連接可能會有所幫助,但MetricBlock不知道其Human或Chimp的事實對我來說是一個絆腳石。
有沒有人有關於如何編寫此查詢的任何建議?或者,是否有其他策略以SQLAlchemy更好的方式定義模型?
感謝您的協助。
Python 2.6
SQLAlchemy 0.7.4
Oracle 11g
編輯:
HumanToMetricBlock定義爲:
humanToMetricBlock = Table(
"human_to_metric_block",
metadata,
Column("human_id", Integer, ForeignKey("human.id"),
Column("metric_block_id", Integer, ForeginKey("metric_block.id")
)
嗨喬納森,謝謝你的快速回復。我使用模型定義編輯了多對多連接表的帖子,我想知道是否可以根據映射來闡明您的帖子?我不知道我實際上可以參考這張表。再次感謝。 – j128 2011-12-25 02:26:51
問一個不同的方式,有沒有辦法只使用human.metrics?我有一個人或一個黑猩猩,我想CBC的,我想我需要在Python中查找查找連接表。我很抱歉沒有在帖子中提出更好的建議。我的問題和你的功能名稱僅限於人類。 – j128 2011-12-25 02:32:53
啊,我想我找到了一個更好的辦法來做這個問題。讓我編輯答案。 – 2011-12-25 06:16:50