如何在Select query python中使用传递参数作为表名?

时间:2016-02-11 18:50:54

标签: python-3.x postgresql-9.3 select-query

我有以下从表中提取数据的函数,但我想将函数中的表名作为参数传递...

def extract_data(table):
    try:
        tableName = table
        conn_string = "host='localhost' dbname='Aspentiment' user='postgres' password='pwd'"
        conn=psycopg2.connect(conn_string)
        cursor = conn.cursor()    
        cursor.execute("SELECT aspects_name, sentiments FROM ('%s') " %(tableName))
        rows = cursor.fetchall()
        return rows
    finally:
        if conn:
            conn.close()

当我将函数称为extract_data(Harpar)时:Harpar是表名 但它给出的错误是“Harpar”没有定义..任何肝脏?

1 个答案:

答案 0 :(得分:1)

更新:截至psycopg2版本2.7:

您现在可以使用psycopg2的sql模块来编写此类型的动态查询:

from psycopg2 import sql
query = sql.SQL("SELECT aspects_name, sentiments FROM {}").format(sql.Identifier(tableName))
cursor.execute(query)

Pre< 2.7

沿着以下行使用AsIs适配器:

from psycopg2.extensions import AsIs
cursor.execute("SELECT aspects_name, sentiments FROM %s;",(AsIs(tableName),))

如果没有AsIs适配器,psycopg2将转义查询中的表名。