You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Polars read_sql查询报错‘BINARY not supported’但表中无二进制列

解决Polars连接PostgreSQL时的"BINARY is not supported"错误

可能原因

即便表中没有显式定义binary类型字段,Polars在类型映射过程中,可能会将PostgreSQL的bytea类型、部分特殊字符类型误识别为binary,或是数据库驱动与Polars的版本兼容问题导致该错误。

具体解决办法

  • 手动指定类型映射
    在调用pl.read_database()时,明确指定可疑列的类型,避免Polars自动识别为binary:

    import polars as pl
    from sqlalchemy import create_engine
    
    engine = create_engine("postgresql://user:password@host:port/dbname")
    df = pl.read_database(
        "SELECT * FROM your_table",
        engine,
        dtype={"suspect_column": pl.Utf8}  # 替换为实际可能出问题的列名
    )
    
  • SQL查询中显式转换字段
    在查询语句里把可能触发问题的字段转换为文本类型,绕过binary类型识别:

    SELECT col1, col2, CAST(questionable_col AS TEXT) FROM your_table
    
  • 更新依赖版本
    旧版本的Polars或PostgreSQL驱动(如psycopg2)可能存在类型映射bug,执行命令更新到最新版:

    pip install --upgrade polars psycopg-binary
    
  • LazyFrame模式下指定Schema
    如果使用懒加载查询,提前定义完整Schema强制列类型:

    import polars as pl
    from sqlalchemy import create_engine
    
    engine = create_engine("postgresql://user:password@host:port/dbname")
    schema = {
        "col1": pl.Int64,
        "col2": pl.Utf8,
        # 逐一指定所有列的明确类型
    }
    lf = pl.scan_database("SELECT * FROM your_table", engine, schema=schema)
    df = lf.collect()
    

内容的提问来源于stack exchange,提问作者Bret Beatty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:43:11