将PostgreSQL行转换为文本,但保持列分开

问题描述 投票:1回答:1

我正在使用Python的Postgres查看器。我需要将所有列转换为文本,以便我可以在GUI中显示它们。我不知道每个表有多少列或它们的名称,因为这应该是一个通用的查看器。谷歌给我这个代码:

SELECT t.*::text FROM table AS t;

但是,这会像这样连接行:

t
----------------|-------
(712,982,dfdfv)

我需要的是这个(当然是带有文本类型),就像普通的SELECT *一样:

id  | vendor_id | vendor_barcode
----|-----------|---------------
712 | 982       | dfdfv

Edit1:我无法在Python中转换数据类型,因为None将变为'None'。

Edit2:我需要来自cursor.description()的列名,所以我不能使用t。* :: text。

python postgresql psycopg2
1个回答
0
投票

好的,所以@Jon Clements提供的解决方案是:

 c = connection.cursor()
 c.execute("SELECT * FROM my_table")
 rows = (str(col) if col is not None else None for col in c.fetchall())
 for row in rows:
     print (row)

我的最终解决方案是:

c.execute("SELECT * FROM my_table LIMIT 1")
select_sql = "SELECT "
for row in c.description:
    column_name = row.name
    if type_ == 17: #binary data
        select_sql += " '<binary data>',"
    else:
        select_sql += " CASE WHEN %s::text='' THEN '''''' ELSE %s::text END," % (column_name, column_name)
select_sql = select_sql[:-1] + " FROM my_table" #remove trailing comma and add table name
c.execute(select_sql)

将空字符串转换为''并保留None值。我的代码实际上更广泛,因为它需要创建treeview列等等。希望这有助于将来有人来这里。

© www.soinside.com 2019 - 2024. All rights reserved.