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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:30:58