传递

时间:2017-06-15 15:26:34

标签: sql postgresql psycopg2

我查看了各个地方的文档,看看如何做到这一点,但我没有取得任何成功。我想将列的名称传递给sql查询。我正在使用psycopg2,我最近的尝试是基于此文档页面http://initd.org/psycopg/docs/sql.html#module-psycopg2.sql

这是我最近的尝试,但是我收到错误IndexError: tuple index out of range,指向我在参数中传递的format()

def parse_files(cursor):
    for name in column_names:  
        cursor.execute(
            sql.SQL(
                "select planet_osm_point.{}, count(*) from planet_osm_point group by planet_osm_point.{}"
            ).format(sql.Identifier(name)))
        for row in cursor:
            print(str(row[0]) + str(row[1])) 

2 个答案:

答案 0 :(得分:0)

给定的文档并不清楚,但看起来我需要在{}内部传入一个值,指定我想要使用的参数。在这种情况下,它是{0}

答案 1 :(得分:0)

column_names = ['col1', 'col2']
for column in column_names:

    query = sql.SQL('''
        select {0}, count(*)
        from planet_osm_point pop
        group by {0}
    ''').format(sql.Identifier('pop.' + column))

    cursor.execute(query)
    for row in cursor.fetchall():
        print (str(row[0]) + str(row[1]))