使用Python导入Yahoo Finance股票CSV至MySQL时遇1292日期错误
解决MySQL导入Yahoo Finance CSV时的Date格式错误问题
嘿,我帮你分析下这个问题——你遇到的InternalError: (1292, "incorrect date value: 'Date' for column 'date' at row 1")错误,本质原因很简单:你下载的CSV文件第一行是表头(也就是列名,比如Date、Open这些),但你的Python代码把这一行也当成了普通数据行去插入数据库。MySQL的date列只认合法的日期格式(比如YYYY-MM-DD),自然没法解析字符串Date,所以直接报错了。
下面给你两种实用的解决方案,按需选就行:
方案一:用原生csv模块跳过表头行
如果你的代码是用csv模块读取数据的,只需要在循环插入前先跳过第一行表头就行。举个修改后的示例:
import csv import mysql.connector from datetime import datetime # 建立数据库连接 db = mysql.connector.connect( host="你的数据库地址", user="你的用户名", password="你的密码", database="stocks" ) cursor = db.cursor() with open('你的股票数据.csv', 'r') as f: reader = csv.reader(f) # 关键一步:跳过CSV的表头行 next(reader) for row in reader: # 额外处理:Yahoo Finance的日期格式通常是MM/DD/YYYY,转成MySQL要求的YYYY-MM-DD raw_date = row[0] formatted_date = datetime.strptime(raw_date, "%m/%d/%Y").strftime("%Y-%m-%d") row[0] = formatted_date # 执行插入操作 cursor.execute( "INSERT INTO TEST (date, open, high, low, close, adj_close, volume) VALUES (%s, %s, %s, %s, %s, %s, %s)", row ) # 提交事务并关闭连接 db.commit() cursor.close() db.close()
方案二:用pandas批量导入(更适合大量数据)
如果你的数据有几百行,用pandas会更省心——它能自动识别表头,还能一键处理日期格式转换,代码也更简洁:
首先得先安装依赖包:
pip install pandas sqlalchemy mysql-connector-python
然后是导入代码:
import pandas as pd from sqlalchemy import create_engine # 创建数据库连接引擎(替换成你的数据库信息) engine = create_engine('mysql+mysqlconnector://用户名:密码@地址/stocks') # 读取CSV,自动解析Date列为日期类型 df = pd.read_csv('你的股票数据.csv', parse_dates=['Date']) # 将数据导入TEST表:if_exists='append'表示追加数据,'replace'会清空原表再导入 df.to_sql('TEST', con=engine, if_exists='append', index=False)
额外注意点
- 确认你的TEST表的
date列确实是DATE类型(不是VARCHAR或其他) - 如果Yahoo Finance的日期格式不是
MM/DD/YYYY,可以调整strptime里的格式字符串(比如%Y-%m-%d)
内容的提问来源于stack exchange,提问作者Mattytripps
相关产品推荐
相关产品推荐

