如何将polars数据框写入DuckDB

3 投票
1 回答
152 浏览
提问于 2025-04-14 15:52

我正在尝试将一个Polars数据框写入一个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:
    pldf.write_database(table_name='test_table', connection=con)

但是,我遇到了以下错误:

sqlalchemy.exc.ArgumentError: Expected string or URL object, got <duckdb.duckdb.DuckDBPyConnection object

如果我使用非默认的 engine='adbc',而不是 df.write_database() 的默认 engine='sqlalchemy',我也会遇到类似的错误。

所以我觉得只要把我的duckdb数据库的URI换上就应该很简单,但我一直没能成功。可能是因为我在使用Windows系统,这让事情变得复杂了?

1 个回答

3

内存数据库。 如果你只是想用DuckDB来查询一个polars数据框,只要这个表在当前的范围内存在,就可以很简单地实现。

duckdb.sql("SELECT * FROM df").show()

持久数据库 如果你想使用一个持久数据库,你可以安装duckdb-engine,然后通过连接的URI字符串来写入数据库。

df.write_database(
    table_name='test_table',
    connection="duckdb:///scratch.db",
)

使用DuckDB读取数据时和往常一样。

with duckdb.connect(database="scratch.db", read_only=False) as con:
    con.query("SELECT * FROM test_table").show()
┌───────┐
│ mynum │
│ int64 │
├───────┤
│     1 │
│     2 │
│     3 │
│     4 │
└───────┘

撰写回答