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

如何将Polars DataFrame写入DuckDB?遇参数错误求解决

将Polars DataFrame写入DuckDB的解决方案

问题原因

你遇到的错误核心是Polars的write_database方法对connection参数的类型要求,和你传入的原生DuckDB连接对象不匹配:

  • 默认的sqlalchemy引擎要求传入SQLAlchemy兼容的连接字符串或Engine实例,而非原生duckdb.DuckDBPyConnection对象
  • adbc引擎同样需要传入ADBC兼容的连接配置,而非原生连接

这个问题和Windows系统无关,本质是参数类型不匹配导致的。

解决方法

方法1:使用DuckDB原生API写入(最直接)

跳过Polars的write_database,直接用DuckDB的注册+建表操作,兼容性拉满:

import polars as pl
import duckdb

pldf = pl.DataFrame({'mynum': [1,2,3,4]})
with duckdb.connect(database="scratch.db", read_only=False) as con:
    # 将Polars DataFrame注册为DuckDB临时视图
    con.register("temp_pldf", pldf)
    # 从临时视图创建正式表
    con.execute("CREATE TABLE test_table AS SELECT * FROM temp_pldf")

方法2:使用Polars + SQLAlchemy引擎

先安装DuckDB的SQLAlchemy驱动:

pip install duckdb-engine

然后用连接字符串替代原生连接对象:

import polars as pl

pldf = pl.DataFrame({'mynum': [1,2,3,4]})
pldf.write_database(
    table_name='test_table',
    connection='duckdb:///scratch.db',  # DuckDB的SQLAlchemy连接字符串
    engine='sqlalchemy'
)

方法3:使用Polars + ADBC引擎

先安装依赖:

pip install polars-adbc duckdb-adbc

同样用连接字符串传入:

import polars as pl

pldf = pl.DataFrame({'mynum': [1,2,3,4]})
pldf.write_database(
    table_name='test_table',
    connection='duckdb:///scratch.db',
    engine='adbc'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 19:16:01