首先,Django 添加了不必要的引号,导致 PostgreSQL 语法错误:
Model.objects.extra(tables=['(SELECT ... FROM model) AS "model_alias"'],
where=...)
产生
SELECT ... FROM "model" , "(SELECT ...) AS "model_alias"" WHERE ...
--语法错误,其中
SELECT ... FROM "model" , (SELECT ...) AS "model_alias" WHERE ...
没问题。
其次,它忽略了extra
方法的tables
参数中表名的额外出现,而the documentation应创建别名的 promise :
Model.objects.extra(tables=['model'], where=...)
只生成 SELECT ... FROM "model"WHERE ...
-- 没有别名。
错在哪里? 如何克服 Django 的这种行为?
最佳答案
您可能需要使用原始 SQL 来执行此操作。参见 Performing raw SQL queries .它可能看起来像这样:
Model.objects.raw("""
SELECT * FROM 'model' JOIN 'model_alias' ON (...)
WHERE (...)
""")
关于python - 用django自己加入postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617197/