我正在使用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
值。我的代码实际上更广泛,因为它需要创建treeview列等等。希望这有助于将来有人来这里。