pd.to_sql仅支持sqlite3与sqlalchemy,所以pymysql直接建立的数据库连接对象无法作为to_sql的连接参数
改动如下:
利用sqlalchemy
建立数据库连接
导入方法换成pd.io.to_sql()
将csv文件导入mysql实例:
# 导包
import pymysql # mysql驱动
import pandas as pd
from sqlalchemy import create_engine # pandas支持的驱动方式
# 读取csv文件内容
notes = pd.read_csv('/Users/wjl/Desktop/xc_notes.csv',encoding='utf8')
# create_engine 创建数据库连接conn
conn = create_engine('mysql+pymysql://root:278***972@localhost:3306/qn_yj?charset=utf8')
# 导入 pd.io.to_sql( DataFrame, table_name, con=db_connect, if_exists='append/fail/replace', index=False)
pd.io.sql.to_sql(notes,'lvyou_note',con=conn,if_exists='append',index=False)
踩坑:
1 提前建好数据库和表
并不是必要,to_sql 会自动生成,但推荐建好,可控性
2 在csv文件首行,添加与表字段相同的内容,一一对应
3 网上很多代码在建立数据库连接的时候,驱动写的是mysqldb,本机不可用,换pymysql正常
4 if_exists参数为append
5 index参数为False,源码默认为True,sql语句会在表中加一列,然而列名都已指定,所以会报错,换False正常