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

Polars read_database_uri()因SQL中`NULL as col`列报错求助

解决Polars read_database_uri()因NULL as column_name触发Rust panic的问题

问题重现

执行包含NULL as bad_col的SQL查询时,触发ConnectorX的Rust panic:

thread '<unnamed>' panicked at 'not implemented: MYSQL_TYPE_NULL', /__w/connector-x/connector-x/connectorx/src/sources/mysql/typesystem.rs:119:18
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
pyo3_runtime.PanicException: not implemented: MYSQL_TYPE_NULL

可行解决方案

1. 给NULL指定明确数据类型

直接返回无类型的NULL会让ConnectorX无法识别字段类型,通过CAST给NULL指定具体类型即可绕过:

SELECT
    col1 as col1_modified,
    col2 as col2_modified,
    col3 as col3_modified,
    col4, col5, col6, col7, col8,
    col9, col10, col11, col12, col13, col14, col15, col16,
    col17,
    CAST(NULL AS VARCHAR(255)) AS bad_col, -- 可根据实际需求替换为INT/DATE等类型
    col19 as col19_modified
FROM my_schema.my_table 
WHERE cond = 1

2. 在Polars中添加全空列

先查询不含该NULL列的结果,再用Polars的API在Python层面添加全空列:

import polars as pl

# 先查询所有正常列
df = pl.read_database_uri(
    "SELECT col1 as col1_modified, col2 as col2_modified, col3 as col3_modified, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14, col15, col16, col17, col19 as col19_modified FROM my_schema.my_table WHERE cond = 1",
    uri="your_database_uri"
)

# 添加全空列,可通过dtype参数指定类型
df = df.with_columns(pl.lit(None).alias("bad_col"))

3. 基于现有列生成全NULL

利用原表中bad_col的类型,通过条件语句生成全NULL结果,返回的字段类型与原列一致:

SELECT
    col1 as col1_modified,
    col2 as col2_modified,
    col3 as col3_modified,
    col4, col5, col6, col7, col8,
    col9, col10, col11, col12, col13, col14, col15, col16,
    col17,
    CASE WHEN 1=0 THEN bad_col ELSE NULL END AS bad_col, -- 永远返回NULL,但类型匹配原列
    col19 as col19_modified
FROM my_schema.my_table 
WHERE cond = 1

问题原因

Polars默认使用ConnectorX作为数据库读取引擎,而ConnectorX的MySQL数据源实现中,未处理MYSQL_TYPE_NULL类型(即无明确类型的NULL值)。当SQL返回无类型NULL时,触发未实现的代码分支导致panic。上述方案都是通过让SQL返回带明确类型的NULL值,或在Python层面处理空列,避开这个未实现的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:41:07