You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Polars.write_database连接MSSQL报错:Connection无_instantiate_plugins属性

问题:Polars write_database 报错 'Connection' object has no attribute '_instantiate_plugins'

我有如下的连接对象sql_conn:

CNXN_STR = 'DRIVER={ODBC+Driver+17+for+SQL+Server};SERVER=aws-dev...;DATABASE=DB;MARS_Connection=no;Trusted_Connection=yes;UID=user;PWD=pass@1'
sql_conn = sqlalchemy_connect(CNXN_STR)

def sqlalchemy_connect(connection_string):
    quoted = urllib.parse.quote_plus(connection_string)
    engine = sqlalchemy.create_engine(f'mssql+pyodbc:///?odbc_connect={quoted}', fast_executemany=True)
    conn = engine.connect()
    return conn

该sql_conn对象在使用Pandas时可以正常工作,只需执行df.to_sql(table_name, sql_conn, if_exists='append')即可上传数据至数据库。

但现在我尝试迁移到Polars,使用polars.DataFrame.write_database()方法:

df.write_database(table_name, sql_conn, if_table_exists='append')

却出现错误:Failed saving to table due to 'Connection' object has no attribute '_instantiate_plugins'

请问有人知道原因吗?请求帮助。

解决方案

  • Polars的write_database方法要求传入SQLAlchemy的Engine对象,而非已打开的Connection对象,这和Pandas的兼容逻辑不同。
  • 修改sqlalchemy_connect函数,直接返回Engine对象:
def sqlalchemy_connect(connection_string):
    quoted = urllib.parse.quote_plus(connection_string)
    engine = sqlalchemy.create_engine(f'mssql+pyodbc:///?odbc_connect={quoted}', fast_executemany=True)
    return engine  # 返回engine而非conn
  • 调用时传入Engine对象即可:
sql_engine = sqlalchemy_connect(CNXN_STR)
df.write_database(table_name, sql_engine, if_table_exists='append')
  • 原因:Polars依赖SQLAlchemy Engine管理连接生命周期,会自行处理连接的打开与关闭,不需要传入已建立的Connection;而Pandas的to_sql同时支持Engine和Connection两种类型,因此之前的代码在Pandas中可以正常运行。

内容的提问来源于stack exchange,提问作者MHA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:01:06