把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 def TableToDataFrame(dt):
3     columnsList = []
4     if len(dt) >0:
5         for item in dt[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。于是查官方文档。

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

from sqlalchemy import create_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://<nohostname>/<path>
# where <path> 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这里引入需要其他的库。又报错了

No module named ‘MySQLdb'”

有事用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()
搞定了。
 
 

 

转载于:https://www.cnblogs.com/wangted007/p/9465154.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值