【问题标题】:SELECT returning rows when executed from SQL client but none when executed from SQLAlchemy从 SQL 客户端执行时选择返回行,但从 SQLAlchemy 执行时不返回行
【发布时间】:2021-07-15 03:26:17
【问题描述】:

我有以下疑问:

SELECT sum(x), sum(y)
FROM stats s1
WHERE fk_id = :id
AND EXISTS (
  SELECT
  FROM stats s2
  WHERE s2.fk_id = s1.fk_id
  AND s2.datetime::date = (now() - '1 day'::interval)::date
)

第二个条件确保有昨天的统计数据。否则不返回任何结果。

当我从 SQL 客户端(即 DBeaver)执行它时,它会按预期返回 1 行,例如12.3, 45.6。当我从 SQLAlchemy 执行查询时,即session.execute(query, {"id": id}).first(),它返回(None, None)。相同的查询,相同的数据库,相同的 id。

我尝试在没有 EXISTS 条件的情况下从 SQLAlchemy 运行它,在这种情况下,它返回 1 行。所以这与从不同地方执行时的第二个条件有关。

为什么从 SQL 客户端执行 EXISTS 条件返回 TRUE 而从 SQLAlchemy 执行 FALSE

【问题讨论】:

    标签: python sql postgresql sqlalchemy psycopg2


    【解决方案1】:

    你必须SELECT某事,即使在子查询中,即使它没有意义:


    SELECT SUM(s1.x), SUM(s1.y)
    FROM stats s1
    WHERE s1.fk_id = :id
    AND EXISTS (
      SELECT 'OMG!' -- <<-- HERE
      FROM stats s2
      WHERE s2.fk_id =  s1.fk_id
      AND s2.datetime::date = (now() - '1 day'::interval)::date
      )
      ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      • 2014-03-11
      • 2020-02-02
      • 2015-04-15
      相关资源
      最近更新 更多