如何将Polars DataFrame保存至数据库(如MS SQL)?ConnectorX无此选项
将Polars DataFrame保存到MS SQL的方法
当然有可行的方案,以下是两种常用方法:
方法1:Polars原生write_database(依赖SQLAlchemy)
Polars提供了write_database方法,通过SQLAlchemy连接引擎实现数据写入,支持MS SQL等多种数据库。
步骤:
- 安装依赖:
pip install polars sqlalchemy pyodbc
- 代码示例:
import polars as pl from sqlalchemy import create_engine # 构建MS SQL连接字符串(替换为你的服务器/账号信息) conn_str = "mssql+pyodbc://<用户名>:<密码>@<服务器地址>/<数据库名>?driver=ODBC+Driver+17+for+SQL+Server" engine = create_engine(conn_str) # 示例Polars DataFrame df = pl.DataFrame({ "id": [1, 2, 3], "username": ["alice", "bob", "charlie"], "score": [85, 92, 78] }) # 写入数据库 df.write_database( table_name="user_scores", connection=engine, if_exists="replace" # 可选值:append(追加)/replace(覆盖)/fail(存在则报错) )
方法2:pyodbc直接批量插入
如果不想依赖SQLAlchemy,可以用pyodbc直接操作,适合需要更精细控制插入逻辑的场景。
代码示例:
import polars as pl import pyodbc # 建立MS SQL连接 conn = pyodbc.connect( "DRIVER={ODBC Driver 17 for SQL Server};" "SERVER=<服务器地址>;" "DATABASE=<数据库名>;" "UID=<用户名>;" "PWD=<密码>" ) cursor = conn.cursor() # 示例DataFrame df = pl.DataFrame({ "id": [1, 2, 3], "username": ["alice", "bob", "charlie"], "score": [85, 92, 78] }) # 先创建目标表(如果不存在) cursor.execute(""" IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'user_scores') CREATE TABLE user_scores ( id INT, username VARCHAR(50), score INT ) """) conn.commit() # 批量插入数据 insert_sql = "INSERT INTO user_scores (id, username, score) VALUES (?, ?, ?)" # 将DataFrame转换为元组列表 data_rows = [tuple(row) for row in df.iter_rows()] cursor.executemany(insert_sql, data_rows) conn.commit() # 关闭连接 cursor.close() conn.close()
注意事项:
- 确保已安装ODBC Driver 17 for SQL Server
- 大数据量场景下,
write_database的性能更优,因为它会自动分批次处理数据 - 若表结构已存在,需保证DataFrame的列类型与数据库表字段类型匹配,避免插入失败
内容的提问来源于stack exchange,提问作者Dennis L
相关产品推荐
相关产品推荐

