我有以下 SQL 查询:
query_string = "SELECT sum(unmatched), " \
"TIMESTAMP WITH TIME ZONE 'epoch' + INTERVAL '1 second' * " \
"round(extract('epoch' from time_window) / {}) * {} as time_window " \
"FROM aggregate_counts WHERE reconciliation_name = %s " \
"GROUP BY round(extract('epoch' from time_window) / {})".format(interval_sec, interval_sec, interval_sec)
cur.execute(query_string, (reconciliation_name))
它工作正常,除非我想避免对“interval_sec”使用字符串替换并使用位置参数,就像我对其他参数一样。问题是,如果我这样做:
query_string = "SELECT sum(unmatched), " \
"TIMESTAMP WITH TIME ZONE 'epoch' + INTERVAL '1 second' * " \
"round(extract('epoch' from time_window) / %s) * %s as time_window " \
"FROM aggregate_counts WHERE reconciliation_name = %s " \
"GROUP BY round(extract('epoch' from time_window) / %s)"
cur.execute(query_string, (interval_sec, interval_sec, reconciliation_name, interval_sec))
我收到以下错误:
错误处理程序中间件捕获了以下异常: {'S': 'ERROR', 'V': 'ERROR', 'C': '42803', 'M': 'column "aggregate_counts.time_window" 必须出现在 GROUP BY子句或在聚合函数中使用','P':'177','F':'parse_agg.c','L':'1344','R':'check_ungrouped_columns_walker'}
文件文件“pg8000/core.py”,第 1829 行,在执行 ps = cache['ps'][key] KeyError: ("SELECT sum(unmatched), TIMESTAMP WITH TIME ZONE 'epoch' + INTERVAL '1 seconds' * round(extract('epoch' from time_window) / %s) * %s as time_window FROM aggregate_counts WHERE revision_name = %s GROUP BY round(extract('epoch' from time_window) / %s)", ((701, 1, ), (701, 1, ), (705, 0, .text_out at 0x10c58cea0>)))
位置参数是否只能用于比较(=、>=、< 等...)?