postgresql - 为什么 POSTGRESQL 的 row_number() 窗口函数在 psycopg2 中不起作用,但在命令行或 pgadmin 中起作用?

标签 postgresql psycopg2

我有以下查询来找出特定数据的行号。

cursor.execute("select row_number from (select row_number() over(order by date desc), * from contest where date <= %s order by date LIMIT (select count(*) from contest where date <= %s) - 1) as new WHERE date = %s", (today, today ,date))

当我执行这个查询时,我得到这个错误信息

psycopg2.ProgrammingError
psycopg2.ProgrammingError: syntax error at or near "select"
LINE 1: select row_number from (select row_number() over(order by d...

然后我在 pgadmin4 或 postgresql 命令行中执行相同的查询,如下所示。它工作正常。

select row_number from (select row_number() over(order by date desc), * from contest where date <= '2017-5-5' order by date LIMIT (select count(*) from contest where date <='2017-5-5' ) - 1) as new WHERE date = '2017-2-1'

我使用最新版本的 postgresql 和 psycopg2。

我被困在这里了。我找不到答案。 我需要一些帮助。

最佳答案

虽然我不知道您的查询试图做什么,但没有语法错误并且它有效,当我从它创建 SSCCE 时:

import psycopg2, datetime

conn = psycopg2.connect("")
cursor = conn.cursor()

cursor.execute("create temporary table contest(id serial primary key, date date not null)")
cursor.execute("insert into contest (date) values (%s)", ("2000-01-01",))

today = datetime.date.today()
date = today-datetime.timedelta(days=1)
cursor.execute("""
    select row_number from (
        select row_number() over(order by date desc), *
        from contest
        where date <= %s
        order by date
        LIMIT ( select count(*) from contest where date <= %s) - 1
    ) as new
    WHERE date = %s""",
    (today, today, date)
)

适用于 Python-3.5/psycopg2-2.7.1 和 Python-2.7/psycopg2-2.6.2。问题似乎出在其他地方。

关于postgresql - 为什么 POSTGRESQL 的 row_number() 窗口函数在 psycopg2 中不起作用,但在命令行或 pgadmin 中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43829400/

相关文章:

sql - 如何从父字符串中分离出结果?

ruby - 如何使带有 Hstore 的 PostgreSQL 在 Sinatra 简单应用程序中工作?

database - 重新启动 PostgreSQL 后,我所有的表都是空的(零行)

来自 psycopg2 PostgreSQL 查询的 Python 数组操作

python - 如何访问 Django 中的低级 psycopg2 连接?

python - 在 sql 查询 python 中使用时,格式选项不起作用

python - 对具有多个约束的表执行 Sql Alchemy On_conflict_do_update

sql - 如何获取从第二个日期到最新日期的所有行?

django - Psycopg2:升级或不升级

python - postgres_psycopg2 的一些问题