【问题标题】:How to use passed parameter as table Name in Select query python?如何在选择查询python中使用传递的参数作为表名?
【发布时间】:2016-02-11 18:50:54
【问题描述】:

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

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' 没有定义.. 任何帮助?

【问题讨论】:

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


    【解决方案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 :

    按照以下方式使用 AsIs 适配器:

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

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

    【讨论】:

    • AsIs 不应用于此目的,应使用新的 sql 模块:stackoverflow.com/a/42980069/5285608
    • @AntoineDusséaux:同意。新的 sql 模块为组合动态查询提供了一种更简洁的方法。我已经相应地更新了旧答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2016-03-29
    • 2016-04-05
    • 2020-10-06
    • 2019-01-02
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多