如何用mssql+pyodbc连接polars write_database?

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

polars>=0.16.10
之前,我使用
.to_pandas().to_sql()
将极坐标数据帧发送到数据库。 现在应该可以使用包装器
pl.Dataframe.write_database()
,但是,尽管我的
connection_uri
适用于
pl.read_database()
pl.read_sql()
。这对
pl.Dataframe.write_database()
不起作用。

这有效:

connection_uri = "mssql+pyodbc://username:password@server:port/database"
pl.read_database(query, connection_uri)

# or

pl.read_sql(query, connection_uri)

这不是:

df = pl.Dataframe({...})

df.write_database( 
    table_name='dbo.Mytable',
    connection_uri="mssql+pyodbc://username:password@server:port/database",
    if_exists="append",
    engine="sqlalchemy"
    )

»»» sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

到目前为止我一直使用旧方法

.to_pandas().to_sql()
,现在在最新的pandas更新后添加了
.to_pandas(use_pyarrow_extension_array=True).to_sql()

但我发现很奇怪的是,相同的connection_uri字符串适用于read_database,但不适用于write_database。

odbc pyodbc python-polars
2个回答
2
投票

当您使用

to_pandas().to_sql()
时,您将哪些参数放入
to_sql()
中?

docs 来看,您似乎必须为其提供

sqlalchemy
引擎。下一个问题,你如何启动引擎?是使用相同的连接字符串还是不同的语法?

pl.DataFrame.write_database
方法的源代码(无论如何相关部分)是这样的:

try:
    from sqlalchemy import create_engine
except ImportError as exc:
    raise ImportError(
        "'sqlalchemy' not found. Install polars with 'pip install polars[sqlalchemy]'."
    ) from exc

engine = create_engine(connection_uri)

# this conversion to pandas as zero-copy
# so we can utilize their sql utils for free
self.to_pandas(use_pyarrow_extension_array=True).to_sql(
    name=table_name, con=engine, if_exists=if_exists, index=False
)

因此,无论您使用什么连接字符串来创建用于 pandas

sqlalchemy
to_sql
引擎,都必须适用于极地
write_database
,因为它所做的只是使用
pandas
to_sql


0
投票

我在用 Polars write_database 到 sqlite3 时遇到同样的问题。 人们需要极坐标“write_database”的模型代码。

© www.soinside.com 2019 - 2024. All rights reserved.