如何将Polars DataFrame写入外部数据库(SQLite)?
将Polars DataFrame写入SQLite的方法
Polars目前没有像Pandas那样直接的to_sql()方法,但有几种可靠的方式可以实现写入SQLite的需求,下面是具体方案:
方法1:使用Polars内置的write_database(推荐,Polars 0.19.0+)
Polars从0.19.0版本开始新增了write_database方法,直接支持将DataFrame写入SQL数据库,包括SQLite。需要先安装sqlalchemy作为依赖:
pip install polars sqlalchemy
示例代码:
import polars as pl from sqlalchemy import create_engine # 示例Polars DataFrame df = pl.DataFrame({ "id": [1, 2, 3], "name": ["Alice", "Bob", "Charlie"], "age": [25, 30, 35] }) # 建立SQLite连接 engine = create_engine("sqlite:///mydatabase.db") # 写入数据库表 df.write_database( table_name="users", connection=engine, if_exists="replace" # 可选值:replace(覆盖)、append(追加)、fail(存在则报错) )
这个方法无需转换为Pandas DataFrame,内存效率更高,适合处理大规模数据。
方法2:转换为Pandas DataFrame后使用to_sql
如果你习惯Pandas的操作方式,或者使用的是旧版本Polars,可以先把Polars DataFrame转成Pandas的,再调用熟悉的to_sql:
import polars as pl import pandas as pd from sqlalchemy import create_engine df = pl.DataFrame({ "id": [1, 2, 3], "name": ["Alice", "Bob", "Charlie"], "age": [25, 30, 35] }) engine = create_engine("sqlite:///mydatabase.db") # 转换后写入,注意设置index=False避免把Polars的索引作为列写入 df.to_pandas().to_sql( name="users", con=engine, if_exists="append", index=False )
⚠️ 注意:如果数据量很大,转换过程可能会占用较多内存,此时优先考虑方法1。
方法3:直接使用sqlite3模块手动写入
如果不想依赖SQLAlchemy,可以直接用Python内置的sqlite3模块,手动处理表创建和数据插入:
import polars as pl import sqlite3 df = pl.DataFrame({ "id": [1, 2, 3], "name": ["Alice", "Bob", "Charlie"], "age": [25, 30, 35] }) # 连接SQLite数据库 conn = sqlite3.connect("mydatabase.db") cursor = conn.cursor() # 先创建表(如果不存在) cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT, age INTEGER ) """) # 将Polars数据转为元组列表,批量插入 data_rows = df.rows() cursor.executemany("INSERT INTO users VALUES (?, ?, ?)", data_rows) # 提交更改并关闭连接 conn.commit() conn.close()
这种方式需要自己定义表结构,适合对SQL语法熟悉的用户,批量插入的效率也比较可观。
内容的提问来源于stack exchange,提问作者Shahar Luftig
相关产品推荐
相关产品推荐

