我需要在我的Django应用程序中使用一些原始SQL查询,但我需要以一种即使数据库表和字段名称发生更改仍然有效的方式执行此操作。例如,在一个版本中,查询可能如下所示:
INSERT INTO app_foo_a27e2da2
SELECT DISTINCT
app_bar_id_309f86af AS app_foo_id_655d53fe,
app_bar_name_729cb7a0 AS app_foo_name_ad439fec
FROM app_bar_c7c976e7
WHERE app_bar_id_309f86af IS NOT NULL;
(注意这是一个戏剧化,真正的数据库不是这个坏。)
理想情况下,我希望能够以类似的方式写一些内容:
INSERT INTO {{App.foo}}
SELECT DISTINCT
{{bar.id}} AS {{foo.id}},
{{bar.name}} AS {{foo.name}}
FROM {{App.bar}}
WHERE {{bar.id}} IS NOT NULL;
然后自动填写实际的字段名称。我可以使用str.format
或其他东西自己滚动,但这似乎应该已经有了解决方案。
如何编写不需要对相关模型的数据库表和字段名进行硬编码的原始SQL查询?