gpt4 book ai didi

postgresql - 使用 psycopg2 在不执行查询的情况下获取 PostgreSQL 结果集列类型

转载 作者:行者123 更新时间:2023-11-29 14:13:29 26 4
gpt4 key购买 nike

给定一个任意的 PostgreSQL 查询,例如SELECT * FROM (...) AS T,如何使用 psycopg2 Python3 库实际执行查询来获取结果集列名称和类型?

我看到了JDBC solution使用 getMetaData(),但我不知道如何在 psycopg2 中获取相同的信息。

PreparedStatement pstmt = con.prepareStatement("select ... ");
ResultSetMetaData meta = pstmt.getMetaData();
for (int i=1; i <= meta.getColumnCount(); i++) { ... }

最佳答案

据我所知,如果不执行(运行 cur.execute() )是不可能的

但是,如果您想要一个使用 Psycopg2 可以用作查询的函数的 Postgres 解决方案,您可以使用此解决方案。如您所料,这将不执行您的查询,它只是创建一个临时的 View这允许我们使用目录 information_schema.columns 查询它的元数据

CREATE OR REPLACE function define_query(query text) 
RETURNS TABLE( column_name text,data_type text)
LANGUAGE plpgsql AS
$$
DECLARE
v_view_n TEXT := 'temp_view$';
BEGIN
EXECUTE format( 'CREATE OR REPLACE TEMP VIEW %I AS %s', v_view_n,query);
RETURN QUERY select i.column_name::text, i.data_type ::text
from information_schema.columns i where i.table_name = v_view_n;
END $$;

获得此函数后,只需调用此函数而不执行它即可获得任何查询的定义。

knayak=# select * from define_query('select 1::int as a,''TWO''::text as b');
column_name | data_type
-------------+-----------
a | integer
b | text
(2 rows)

关于postgresql - 使用 psycopg2 在不执行查询的情况下获取 PostgreSQL 结果集列类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57335039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com