使用Polars的write_database写入SQLite时遇ArrowExtensionArray属性错误
Polars写入SQLite日期数据报错的解决方法
问题描述
使用Polars的write_database方法向SQLite写入日期数据时,会触发错误:
AttributeError: 'ArrowExtensionArray' object has no attribute 'to_pydatetime'
以下两种场景均会出现该错误:
- 基于
datetime.date对象构建DataFrame后写入:
import polars as pl from datetime import date import sqlite3 dates_dt = [date(2000, 1, 1), date(2000, 1, 2), date(2000, 1, 3)] df = pl.DataFrame({"date": dates_dt}) conn = sqlite3.connect("test.db") df.write_database("test_table", "sqlite:///test.db", if_table_exists="replace") conn.close()
- 将日期字符串转换为Polars Date列后写入:
date_str = ["2000-01-01", "2000-01-02", "2000-01-03"] df = pl.DataFrame({"date": date_str}) df = df.with_columns(pl.col("date").str.to_date("%Y-%m-%d")) df.write_database("test_table", "sqlite:///test.db", if_table_exists="replace")
解决方案
该错误源于Polars的Arrow Date类型与SQLAlchemy(write_database底层依赖)的SQLite适配器存在兼容问题,可通过以下方式解决:
1. 转换日期列类型为Datetime
SQLite对Datetime类型的支持更适配,将Polars Date列转为Datetime后再写入:
import polars as pl from datetime import date dates_dt = [date(2000, 1, 1), date(2000, 1, 2), date(2000, 1, 3)] df = pl.DataFrame({"date": dates_dt}) # 转换Date类型为Datetime df = df.with_columns(pl.col("date").cast(pl.Datetime)) df.write_database("test_table", "sqlite:///test.db", if_table_exists="replace")
若从字符串转换,直接生成Datetime列即可:
date_str = ["2000-01-01", "2000-01-02", "2000-01-03"] df = pl.DataFrame({"date": date_str}) df = df.with_columns(pl.col("date").str.to_datetime("%Y-%m-%d")) df.write_database("test_table", "sqlite:///test.db", if_table_exists="replace")
2. 通过Pandas中转写入
无需修改列类型,先将Polars DataFrame转为Pandas DataFrame,再用to_sql写入:
import polars as pl from datetime import date import sqlite3 import pandas as pd dates_dt = [date(2000, 1, 1), date(2000, 1, 2), date(2000, 1, 3)] df = pl.DataFrame({"date": dates_dt}) conn = sqlite3.connect("test.db") df.to_pandas().to_sql("test_table", conn, if_exists="replace", index=False) conn.close()
3. 升级依赖库
确保Polars和SQLAlchemy为最新版本,新版本可能已修复该兼容问题:
pip install --upgrade polars sqlalchemy
内容的提问来源于stack exchange,提问作者Péter Szilvási
相关产品推荐
相关产品推荐

