我试图在Postgres中使用FOR
循环来计算数据库中每个地理位置(变量)范围内的数据平均值。我正在使用python/psycopg2。代码如下:
query ='''
DECLARE geoids RECORD;
BEGIN
RAISE NOTICE 'Beginning average calculation';
FOR geoids IN select*from census_blocks
WHERE ST_contains((select geom from census_cbsa
WHERE cbsafp10='%s'),census_blocks.geom)
LOOP
INSERT INTO temp_avgs VALUES
(geoids,
select avg(select alljobs from accessibility_results
WHERE geoid=geoids
AND deptime BETWEEN '%s' and '%s'
AND threshold='%s')
END LOOP;
END;
'''
我收到的错误是
^{pr2}$如果我删除这个DECLARE
语句(因为我相信选择值上的LOOP
变量会自动声明为RECORD
),则错误变成:
psycopg2.ProgrammingError: syntax error at or near "RAISE"
LINE 4: RAISE NOTICE 'Beginning average calculation';
我应该如何正确格式化这个查询?在
循环
您使用的是PL/pgSQL代码,但试图将其表述为SQL查询。那是不可能的。在
使用^{} 语句或(因为您希望使用参数)创建一个plpgsql function:
确保你在你的客户中正确地转义引号!在
卓越的基于集合的解决方案
这将演示plpgsql函数的基础知识。但是,正如@Gordon已经提供的那样,只需使用一个
^{pr2}$INSERT
语句来执行相同的。进一步解开:不如把它当作一个单选词。像这样:
我不确定所有列的来源,所以表别名有点猜测。在
相关问题 更多 >
编程相关推荐