如何将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
相关产品推荐
相关产品推荐

