pandas to_sql填坑

pandas作为数据分析的重要工具,经常性的与数据库进行连接,在将dataframe保存到数据库时,会用到to_sql,虽然to_sql函数可以直接将字典数据直接存入数据库,但是,to_sql限制是非常之大的。

来看一下下面的代码

import pandas as pd
import pymysql

conn=pymysql.connect(host,port,user,password,charset,db)
df1=pd.DataFrame(list)
df.to_sql(tablename,conn)

如果我们按照上述代码编写,很遗憾,报错无疑,以下是报错信息。

错误信息:Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting

根据库的文档,我们看到to_sql函数支持两类mysql引擎一个是sqlalchemy,另一个是sqlliet3.没错,在你写入库的时候,pymysql是不能用的!!!mysqldb也是不能用的,你只能使用sqlalchemy或者sqlliet3!!鉴于sqllift3已经很久没有更新了,笔者这里建议使用sqlalchemy!!

所以上述代码改为

  • 更改连接设置
import pandas as pd
from sqlalchemy import create_engine

conn = create_engine('mysql+pymysql://root:password@localhost:3306/databasename?charset=utf8')  
df1=pd.DataFrame(list)
df.to_sql(tablename,conn)

此处附上SQLAlchemy 1.3 Documentation供参考

https://docs.sqlalchemy.org/en/13/core/engines.html

ps:if_exists 的参数说明

fail的意思如果表存在,啥也不做
replace的意思,如果表存在,删了表,再建立一个新表,把数据插入
append的意思,如果表存在,把数据插入,如果表不存在创建一个表!!

 

你可能感兴趣的:(python,to_sql,pandas)