我在 postgresql 中有一堆表:
create TABLE run (
id integer NOT NULL,
build_id integer NOT NULL,
);
CREATE TABLE test_info (
suite_id integer NOT NULL,
run_id integer NOT NULL,
test_id integer NOT NULL,
id integer NOT NULL,
error_text text
);
CREATE TABLE tool_info (
id integer NOT NULL,
tool_id integer,
revision_id integer,
test_info_id integer,
);
CREATE TABLE suite_info (
id integer,
suite_id integer NOT NULL,
run_id integer NOT NULL,
);
CREATE TABLE test (
id integer NOT NULL,
path text NOT NULL
);
我想使用 django ORM 编写以下查询。我用的是2.2.
select test.path, tool_info.id, run.id, test_info.id, suite_info.id from run join test_info on run.id = test_info.run_id join suite_info on run.id = suite_info.run_id join tool_info on tool_info.test_info_id=test_info.id join test on test_info.test_id=test.id where run.id=34;
我试过这个:
x= Run.objects.filter(suiteinfo__run_id=34)
(Pdb) str(x.query)
'SELECT "run"."id", "run"."build_id", "run"."date", "run"."type_id", "run"."date_finished", "run"."ko_type", "run"."branch_id", "run"."arch_id" FROM "run" INNER JOIN "suite_info" ON ("run"."id" = "suite_info"."run_id") WHERE "suite_info"."run_id" = 34'
我可以看到它正在执行连接,但数据没有出现在选择中。我尝试过 selected_related 等。
RUN 表是将数据联系在一起的中心表。如何使用 ORM 创建该查询?
要使用 ORM 连接表,您可以使用 select_lated() 和 prefetch_lated()。 查看这些主题以确定哪个主题适合您。
希望这些信息对您有所帮助。