如何将polars数据框写入DuckDB
我正在尝试将一个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 │
└───────┘