将PostgreSQL的行转为文本,但保持列分开[英] Cast a PostgreSQL row to text, but keep columns separate

本文是小编为大家收集整理的关于将PostgreSQL的行转为文本,但保持列分开的处理方法,想解了将PostgreSQL的行转为文本,但保持列分开的问题怎么解决?将PostgreSQL的行转为文本,但保持列分开问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在使用 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.

推荐答案

好的,@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 值.我的代码实际上更广泛,因为它需要创建树视图列等.希望这对将来来这里的人有所帮助.

本文地址:https://www.itbaoku.cn/post/1764204.html