【发布时间】:2015-10-12 14:02:28
【问题描述】:
我有一个错误,当 SQLAlchemy 产生错误的 SQL 查询时,我无法确定条件。
我使用 Flask-SQLAlchemy,最初它只是一个 MyModel.query,它由带有 JOIN 的简单 SELECT 表示。但是当应用 .limit() 方法时,它会转换并使用子查询来获取主要对象,然后才应用 JOIN。问题出在 ORDER BY 语句中,该语句保持不变并忽略子查询定义。
这里是示例,我已经简化了选择字段:
-- Initially
SELECT *
FROM customer_rates
LEFT OUTER JOIN seasons AS seasons_1 ON seasons_1.id = customer_rates.season_id
LEFT OUTER JOIN users AS users_1 ON users_1.id = customer_rates.customer_id
-- other joins ...
ORDER BY customer_rates.id, customer_rates.id
-- Then .limit()
SELECT anon_1.*, *
FROM (
SELECT customer_rates.*
FROM customer_rates
LIMIT :param_1) AS anon_1
LEFT OUTER JOIN seasons AS seasons_1 ON seasons_1.id = anon_1.customer_rates_season_id
LEFT OUTER JOIN users AS users_1 ON users_1.id = anon_1.customer_rates_customer_id
-- other joins
ORDER BY customer_rates.id, customer_rates.id
这个查询给出了以下错误:
ProgrammingError: (psycopg2.ProgrammingError) missing FROM-clause entry for table "customer_rates"
查询的最后一行应该是:
ORDER BY anon_1.customer_rates_id
产生此查询的代码是大型应用程序的一部分。我试图在一个小烧瓶应用程序中从头开始实现它,但我无法重现它。在小型应用程序中,它总是使用 JOIN。 所以我需要知道,什么时候 SQLAlchemy 决定使用子查询。
我使用 python 2.7 和 PostgreSQL 9
【问题讨论】:
标签: python sql postgresql sqlalchemy