如何在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
相关产品推荐
相关产品推荐

