2014-11-05 84 views
0

我已经case语句保存在像变量:SQLAlchemy中插入来自case语句select查询到FROM子句

article_video_exists = exists(
    select([1], correlate=False, from_obj=article_video_t).where(
     article_video_t.c.article_id == article_t.c.id)) 

has_videos_case = case([(article_video_exists, 1), ], else_=0).label(
    'has_videos') 

,并使用此情况下,像

select([has_videos_case], from_obj=article_t) 

执行后,我在查询FROM语句看到像

FROM article_t, 
    (select 1 
     from article_video_t 
     where article_video_t.article_id=article_t.id) 

和我应该使用别名的错误。 我试过使用别名进行选择,但它没有解决我的问题。 我试图将correlate = False传递给所有select子句,但它没有帮助,但是如果我在最后的select子句中如果没有使用变量的情况下通过大小写,它的工作并不会生成无效的FROM子句。

但之后我有很多重复的代码,那么在这种情况下如何使用变量来处理呢?谢谢。

+0

我不确定您的错误是否与您展示的代码有关,因为我希望在您的表达式中的某个地方看到“EXISTS”,但我没有。 – van 2014-11-06 08:26:39

+0

我只显示FROM子句,没有选择。 select语句对于存在且正确的表名是正确的。但FROM也有这个选择子查询,并提出别名要求的错误 – Lagovas 2014-11-06 13:34:54

+0

这是哪里* select子查询*来自哪里?另一种构造?请分享更多的信息 – van 2014-11-06 23:38:21

回答

0

通过使用select(...)。correlate_except(article_video_t)来修复。