• 欢迎访问小杰博客网站
  • 欢迎访问小杰博客网站哦

python3 pandas to_sql填坑

python 小杰 8个月前 (12-10) 260次浏览 已收录 0个评论

为什么要使用to_sql方法

表结构如下:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

现在要向my_balance表中插入一下数据,下面我们来看三段代码:

  1. 普通pymysql sql insert 写法(强烈不推介这种写法

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 优点:代码比较直观易懂,适合初学者读
  • 缺点:每次一个insert语句都要复制一堆代码,代码复用性为0.
  1. pandas拼接insert写法(这种写法有BUG

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'account': '8866.ZH'问题出在这里,错误如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ZH,0.0005)

所以只能存储没带标点符号的字符串~!

so,优缺点就不说了,这BUG太明显,压根不能用~!

  1. to_sql写法

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

你没有看错,就这么几行就搞定了insert了,是不是非常爽~!但是有几点需要注意下:

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

数据库链接不再使用pymysql,而改用sqlalchemycon=engine 而不是con=db 官方文档

最最最坑的地方出现了,大家注意:

错误:No module named ‘MySQLdb’

百度到的代码,基本99%都是这么写的:

  • 1

但是,如果按照如上写法,在python3.6(我的python版本)环境下会出现找不到mysqldb模块错误!
正确的写法如下,因为python3将mysqldb改为pymysql了!!!

  • 1

if_exists 的参数说明

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

index=False, index_label=‘id’

如果你数据库中主键名称为index则不用设置这两项,如果不是,请按照主键名称设置!

附上一篇文章:to_sql与普通insert性能对比测试

关于to_sql事务问题

看到这里,有编程经验的朋友,一定会发现,使用to_sql的代码中,没有看到事务,在有多个insert或者update的情况时,如果回滚提交呢?从下面这篇文章中寻找答案吧~!

关于to_sql事务

不能翻墙的小伙伴请看下面代码示例:


小杰博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python3 pandas to_sql填坑
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址