如何将极坐标数据帧写入DuckDB

问题描述 投票:0回答:1

我正在尝试将 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 上可能会让事情变得复杂吗?

python uri python-polars duckdb
1个回答
2
投票

内存数据库。如果您只想使用 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 │
└───────┘
© www.soinside.com 2019 - 2024. All rights reserved.