如何使用psql中表中的列列表检索数据

Posted

技术标签:

【中文标题】如何使用psql中表中的列列表检索数据【英文标题】:How to retrieve data using a list of columns from a table in psql 【发布时间】:2021-12-31 10:55:24 【问题描述】:

我正在使用 python 和 PSQL 来提取数据,但我想做的是使用包含所需列名称的列表从特定表中检索数据。

*args 里面可以有任意数量的名字,所以我想知道怎么做。

使用给定查询读取表的功能:

def read_table_data(table_name, query, conn):
    table_name = pd.read_sql_query(query, conn)
    return table_name

数据提取函数:

def extract_variable_table_many_columns(table, *args):   
    df = pd.DataFrame()
    col = []
    for c in args:
        print(c)
        col.append(c)
    query_extract_variables = "SELECT  FROM ;".format(str(col),str(table))
    df1 = read_table_data("".format(str(table)), query_extract_variables , conn)
    df = df.append(df1)
    return df

【问题讨论】:

【参考方案1】:

我想使用包含所需列名称的列表从特定表中检索数据。

因此,您希望动态构建实际的 SQL 语句,而不仅仅是通常的参数替换。由于使用字符串连接来构建 SQL 查询是等待发生的灾难,因此您应该使用psycopg2.sql module。它提供了一种从变量中使用标识符(即列名)的安全方法。

更多详情请见Passing table name as a parameter in psycopg2。

【讨论】:

感谢您的有用回复,我只是快速浏览了链接和模块,但正如您在 *args 中看到的那样,变量的数量是不同的。我想知道这是否可以通过 psycopg2.sql 模块完成? @MostafaAlishahi 这应该可以使用join method of SQL。文档中的示例几乎可以满足您的需要:用字符串制作标识符并将它们连接起来以提供标识符列表,然后可以将其插入到实际查询中。【参考方案2】:

再次感谢@SebDieBln,我能够通过以下方式解决它:

 query = sql.SQL("select fields from table").format(fields=sql.SQL(',').join([sql.Identifier(n) for n in columns]),table=sql.Identifier(table))

【讨论】:

以上是关于如何使用psql中表中的列列表检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何计算 Spark SQL(Databricks)中表中的列数?

如何使用 LINQ 中的外键列检索单个记录?

如何检索 Pandas 数据框中的列数?

如何使用 C# 获取 Access 数据库中的列列表?

如何使用嵌套字典列表展平熊猫数据框中的列

使用 psql 如何列出安装在数据库中的扩展?