使用pandas的to_sql()写入MySQL时报SELECT name FROM sqlite_master错误如何解决
问题排查及解决方案
错误原因
- 执行
con.cursor().execute()时con对象尚未初始化,代码执行顺序错误 - pandas
to_sql方法不支持直接传入pymysql原生连接作为con参数,你虽已导入create_engine但未使用,导致pandas默认将数据库识别为sqlite,触发语法不兼容报错,这也是报错信息中出现sqlite相关系统表查询的核心原因 - 导入语句存在拼写错误:
mysql.conector应为mysql.connector,如未使用该库可直接删除该行导入
修复后代码
from __future__ import print_function import pandas as pd from datetime import date, datetime, timedelta import numpy as np import yfinance as yf import pymysql import pandas_datareader.data as web from sqlalchemy import create_engine import yahoo_fin.stock_info as si ###################################################### # 数据库配置 user = '...' passw = '...' host = '...' port = 3306 database = 'stockdata' # 创建符合pandas要求的SQLAlchemy引擎 engine = create_engine(f'mysql+pymysql://{user}:{passw}@{host}:{port}/{database}?charset=utf8') # 执行建库操作 with engine.connect() as conn: conn.execute(f"CREATE DATABASE IF NOT EXISTS {database}") # 写入数据,直接传入engine作为con参数 df.to_sql(name='stockdata', con=engine, if_exists='append', index=False)
补充说明
如果运行时出现编码相关报错,可将连接串中的charset=utf8改为charset=utf8mb4,兼容更多特殊字符。
内容的提问来源于stack exchange,提问作者user16845627
相关产品推荐
相关产品推荐

