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的意思,如果表存在,把数据插入,如果表不存在创建一个表!!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值