datatable保存mysql数据库_把pandas的datatable数据自动保存进数据库的相应的表

需求:通过一个多表连接的sql查询出的数据,之前是调用pandas把结果保存成excel文件。现在想吧数据保存近数据库一张字段一样的表。

我的环境:IDE windows下 pycharm  。python版本 3.6   pandas版本 0.23

1 sql = 'select * from 我的大sql'

2 cursor.execute(sql)3 results = cursor.fetchall()

这里 results时候sql查询出的结果。想法是使用pandas的 to_sql 方法把查询结果插入数据库。遇到了一些坑。这里,哼哼,把埋坑结果还原一下。

由于调用to_sql需要的数据类型为DataFrame。因此需要首先 把dt转为df,下边是我的实现(有更好方法请参考)

1 '''将dt类型转换成DataFrame类型'''

2 defTableToDataFrame(dt):3 columnsList =[]4 if len(dt) >0:5 for item indt[0]:6 columnsList.append(item)7 df = pd.pandas.DataFrame(data = dt,columns =columnsList)8 return df

这里我们已经拿到了df。继续往下走,这里就快遇到坑了。之前查的一些用法,发现都是python2.X的。

1 #这里是我最后的成功的用法,给予pandas 0.23版本

2 df.to_sql('你要插入的表',con = irpstdconnection,if_exists='replace',index=False,chunksize=1000)

这里问题又来了。con该怎么写?我这里是mysql。默认他会是sqllite。于是查官方文档。

b1df28ad215c9536a2614c4a0dfc84c7.png

但是看了还是不知道该怎么搞,继续搜索 找到了例子的部分。找到了以下代码——我们离目标又近了一步

from sqlalchemy importcreate_engine

engine= create_engine('postgresql://scott:tiger@localhost:5432/mydatabase')

engine= create_engine('mysql+mysqldb://scott:tiger@localhost/foo')

engine= create_engine('oracle://scott:tiger@127.0.0.1:1521/sidname')

engine= create_engine('mssql+pyodbc://mydsn')#sqlite:///#where is relative:

engine = create_engine('sqlite:///foo.db')#or absolute, starting with a slash:

engine = create_engine('sqlite:absolute/path/to/foo.db')

当然,mysql的写法就是我们的需求了。但是问题又来了,

from sqlalchemy import create_engine这里引入需要其他的库。又报错了

有事用pycharm去搜索。我勒个去,没有找到相关信息。立刻感觉不会再爱了(进入死胡同)——这里需要注一下。我是在windows环境下的开发。MySQLdb据说只支持2.X版本。

再搜吧,最后还是让个找到了方案。详情见这位小哥的方案。

https://www.cnblogs.com/TaleG/p/6735099.html

解决方案就是 使用PyMsqlDb代替

然后在需要的项目中,把 __init__.py中添加两行:

import pymysql

pymysql.install_as_MySQLdb()

就可以用 import MySQLdb了。其他的方法与MySQLdb一样。

————————————终于解决了,把自己想要的数据 插入了自己想要的表。哦哦

这里总结下:使用pandas的 to_sql con要这样写

engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')

但是依赖MySQLdb。3.X python 没有。咋办

使用pymysql 来替换。并写上

pymysql.install_as_MySQLdb()

搞定了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值