我正在尝试将 Polars DataFrame 写入 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'
,我会收到类似的错误。
所以看起来应该很容易为我的 ducdkb 数据库交换 URI,但我也无法让它工作。我在 Windows 上可能会让事情变得复杂吗?
内存数据库。如果您只想使用 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 │
└───────┘