如何通过Polars自动将PostgreSQL二进制数据转为文本?
解决方案
方法1:动态生成带类型转换的SQL查询
直接从PostgreSQL系统表获取目标表的字段信息,自动对uuid和jsonb类型字段添加::text转换,其他字段保持原样,无需手动罗列所有字段。
示例代码:
import polars as pl import psycopg2 def generate_auto_convert_query(table_name, db_uri): # 连接数据库查询字段元信息 conn = psycopg2.connect(db_uri) cursor = conn.cursor() cursor.execute(""" SELECT column_name, data_type FROM information_schema.columns WHERE table_name = %s ORDER BY ordinal_position """, (table_name,)) columns = cursor.fetchall() conn.close() # 拼接转换后的字段列表 select_clause = [] for col_name, data_type in columns: if data_type in ('uuid', 'jsonb'): select_clause.append(f"{col_name}::text AS {col_name}") else: select_clause.append(col_name) return f"SELECT {', '.join(select_clause)} FROM {table_name};" # 使用示例 table_name = "your_table" database_uri = "postgresql://user:pass@host:port/db" auto_query = generate_auto_convert_query(table_name, database_uri) df = pl.read_database_uri( query=auto_query, uri=database_uri, engine="adbc" )
方法2:Polars读取后批量转换字段
先执行SELECT *读取全量数据,再在Polars中识别需要转换的字段,批量转为字符串。
方案A:按字段名指定转换
如果明确知道需要转换的字段名称,直接针对性转换:
df = pl.read_database_uri( query="SELECT * FROM your_table;", uri=database_uri, engine="adbc" ).with_columns( pl.col("id").cast(pl.Utf8), pl.col("data").cast(pl.Utf8) )
方案B:自动识别二进制类型字段
如果不确定字段名,但二进制类型对应需要转换的字段,可遍历类型匹配的列:
df = pl.read_database_uri( query="SELECT * FROM your_table;", uri=database_uri, engine="adbc" ) # 批量转换所有Binary类型的列为字符串 binary_cols = [col for col, dtype in df.schema.items() if dtype == pl.Binary] df = df.with_columns(pl.col(binary_cols).cast(pl.Utf8))
方法3:配置ADBC驱动的类型映射(推荐)
ADBC PostgreSQL驱动支持通过配置参数调整类型映射,直接将uuid和jsonb类型映射为字符串,无需修改SQL或后续转换。
示例代码:
import polars as pl from adbc_driver_postgresql import dbapi # 创建带类型映射配置的连接 with dbapi.connect(database_uri, options={ "adbc.postgresql.type_override.uuid": "utf8", "adbc.postgresql.type_override.jsonb": "utf8" }) as conn: df = pl.read_database( query="SELECT * FROM your_table;", connection=conn, engine="adbc" )
注:不同版本的ADBC驱动参数名称可能略有差异,需以对应版本驱动文档为准。
内容的提问来源于stack exchange,提问作者Istvan
相关产品推荐
相关产品推荐

