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

如何在Pandas或SQLAlchemy中将年月转为日期并存入MySQL?

解决方案

首先明确:MySQL没有原生的「仅年月」数据类型,只有包含年月日的DATE/DATETIME类型,或者字符串类型。要实现「不添加日信息」的存储需求,有两种可行方案:

方案1:直接存储字符串格式的年月

Pandas处理

不需要将2016-01转为datetime类型,直接保留原字符串格式,存入MySQL的CHAR(7)或VARCHAR(7)字段:

# 假设df["month"]已为"YYYY-MM"格式的字符串
from sqlalchemy import create_engine

# 初始化数据库连接
engine = create_engine('mysql+pymysql://用户名:密码@主机地址/数据库名')
# 写入数据
df.to_sql('目标表名', engine, if_exists='append', index=False)

SQLAlchemy表定义

在定义表结构时,将年月字段设为固定长度的字符串类型:

from sqlalchemy import Column, String, Integer, create_engine
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class YourTable(Base):
    __tablename__ = '目标表名'
    id = Column(Integer, primary_key=True)
    month = Column(String(7))  # 专门存储YYYY-MM格式的年月字符串

# 创建表(若不存在)
engine = create_engine('mysql+pymysql://用户名:密码@主机地址/数据库名')
Base.metadata.create_all(engine)

方案2:存储带日的日期,但查询时仅提取年月

如果必须使用MySQL的DATE类型存储,只能默认存入当月第一天(比如2016-01-01),但可以在查询时通过MySQL函数提取年月部分:

-- 查询时仅返回YYYY-MM格式的年月
SELECT DATE_FORMAT(month_col, '%Y-%m') AS year_month FROM 目标表名;

这种方式下,Pandas转换时可以指定format参数明确解析格式:

df["month"] = pd.to_datetime(df["month"], format='%Y-%m')
# 写入时会自动转为带日的DATE类型存入MySQL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:50:46