我有一个错误,当SQLAlchemy产生错误的SQL查询,但我不能确定条件。
我使用Flask-SQLAlchemy,最初它只是一个MyModel.query,它由简单的SELECT和JOINs表示。但是当应用.limit()方法时,它会转换并使用子查询来获取主对象,然后才会应用连接。问题出在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生成此查询的代码是大型应用程序的一部分。我曾尝试在一个小的flask应用程序中从头开始实现它,但我无法重现它。在小型应用程序中,它总是使用连接。所以我需要知道,SQLAlchemy什么时候决定使用子查询。
我用的是Python2.7和PostgreSQL 9
发布于 2015-10-13 04:36:04
答案很简单。当连接表与被查询模型具有多对一关系时,使用子查询。因此,为了生成正确数量的结果,它限制子查询中的查询行
https://stackoverflow.com/questions/33083161
复制相似问题