我有以下查询来查找某个数据的行号。
-05:00
当我执行此查询时,收到此错误消息
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))
我在pgadmin4或postgresql命令行中执行相同的查询,如下所示。它工作正常。
psycopg2.ProgrammingError
psycopg2.ProgrammingError: syntax error at or near "select"
LINE 1: select row_number from (select row_number() over(order by d...
我使用最新版本的postgresql和psycopg2。
我被困在这里。我无法找到答案。 我需要一些帮助。
答案 0 :(得分:2)
虽然我不知道您的查询尝试做什么,但是当我从中创建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。问题似乎在其他地方。
答案 1 :(得分:1)
鉴于Tometzky的测试,该问题很可能是一个不可打印的角色或类似的。
尝试启用log_error_verbosity = verbose
并检查PostgreSQL错误日志以获取更多详细信息。
同时检查打开了不可打印字符显示的源文件。
否则....你是否确定从Psycopg2连接到与psql相同的数据库和相同的postgres版本?