заранее спасибо за помощь.
У меня есть две сущности: человек и шимпанзе. Каждый из них имеет коллекцию метрик, которые могут содержать подклассы 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 не знает своего Человека или Шимпанзе, является для меня камнем преткновения.
У кого-нибудь есть советы, как написать этот запрос? Альтернативно, существуют ли другие стратегии для определения модели таким образом, чтобы она лучше работала с SQLAlchemy?
Спасибо за вашу помощь.
Python 2.6
SQLAlchemy 0.7.4
Oracle 11g
Edit:
HumanToMetricBlock определяется как:
humanToMetricBlock = Table(
"human_to_metric_block",
metadata,
Column("human_id", Integer, ForeignKey("human.id"),
Column("metric_block_id", Integer, ForeginKey("metric_block.id")
)
за инструкцию .