Python使用Pandas库实现MySQL数据库的读写


Posted in Python onJuly 06, 2019

本次分享将介绍如何在Python中使用Pandas库实现MySQL数据库的读写。首先我们需要了解点ORM方面的知识

ORM技术

对象关系映射技术,即ORM(Object-Relational Mapping)技术,指的是把关系数据库的表结构映射到对象上,通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

在Python中,最有名的ORM框架是SQLAlchemy。Java中典型的ORM中间件有:Hibernate,ibatis,speedframework。

SQLAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行

SQLAlchemy模块提供了create_engine()函数用来初始化数据库连接,SQLAlchemy用一个字符串表示连接信息:

'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名

Pandas读写MySQL数据库

我们需要以下三个库来实现Pandas读写MySQL数据库:

  • pandas
  • sqlalchemy
  • pymysql

其中,pandas模块提供了read_sql_query()函数实现了对数据库的查询,to_sql()函数实现了对数据库的写入。并不需要实现新建MySQL数据表。

sqlalchemy模块实现了与不同数据库的连接,而pymysql模块则使得Python能够操作MySQL数据库。

我们将使用MySQL数据库中的mydb数据库以及employee表,内容如下:

Python使用Pandas库实现MySQL数据库的读写

注意:

1.根据库的文档,我们看到to_sql函数支持两类mysql引擎一个是sqlalchemy,另一个是sqlliet3.没错,在你写入库的时候,pymysql是不能用的!!!

mysqldb也是不能用的,你只能使用sqlalchemy或者sqlliet3!!鉴于sqllift3已经很久没有更新了,笔者这里建议使用sqlalchemy!!

2.to_sql函数并不在pd之中,而是在io.sql之中,是sql脚本下的一个类!!!所以to_sql的最好写法就是:

pd.io.sql.to_sql(df1,tablename,con=conn,if_exists='repalce')  

下面将介绍一个简单的例子来展示如何在pandas中实现对MySQL数据库的读写:

import pandas as pd
from sqlalchemy import create_engine
# 初始化数据库连接,使用pymysql模块
# MySQL的用户:root, 密码:147369, 端口:3306,数据库:test
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
# 查询语句,选出employee表中的所有数据
sql = ''' select * from employee; '''
# read_sql_query的两个参数: sql语句, 数据库连接
df = pd.read_sql_query(sql, engine)
# 输出employee表的查询结果
print(df)

# 新建pandas中的DataFrame, 只有id,num两列
df = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['zhangsan', 'lisi', 'wangwu', 'zhuliu']})
# 将新建的DataFrame储存为MySQL中的数据表,储存index列
df.to_sql('mydf', engine, index=True)
print('Read from and write to Mysql table successfully!')

运行结果:

Python使用Pandas库实现MySQL数据库的读写

这说明我们确实将pandas中新建的DataFrame写入到了MySQL中!

将CSV文件写入到MySQL中

以上的例子实现了使用Pandas库实现MySQL数据库的读写,我们将再介绍一个实例:将CSV文件写入到MySQL中,示例的example.csv文件如下

Python使用Pandas库实现MySQL数据库的读写

示例的Python代码如下:

# -*- coding: utf-8 -*-

# 导入必要模块
import pandas as pd
from sqlalchemy import create_engine

# 初始化数据库连接,使用pymysql模块
db_info = {'user': 'root',
      'password': '123456',
      'host': 'localhost',
      'port': 3306,
      'database': 'test'
      }

engine = create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info, encoding='utf-8')
# 直接使用下一种形式也可以
# engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')

# 读取本地CSV文件
df = pd.read_csv("C:/Users/fuqia/Desktop/example.csv", sep=',')
print(df)
# 将新建的DataFrame储存为MySQL中的数据表,不储存index列(index=False)
# if_exists:
# 1.fail:如果表存在,啥也不做
# 2.replace:如果表存在,删了表,再建立一个新表,把数据插入
# 3.append:如果表存在,把数据插入,如果表不存在创建一个表!!
pd.io.sql.to_sql(df, 'example', con=engine, index=False, if_exists='replace')
# df.to_sql('example', con=engine, if_exists='replace')这种形式也可以
print("Write to MySQL successfully!")

在MySQL中查看example表格

Python使用Pandas库实现MySQL数据库的读写

补充:engine.execute(sql)可以直接执行sql语句:

from sqlalchemy import create_engine 
 
 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
sql = "DROP TABLE IF EXISTS example"
engine.execute(sql)

如果用pymysql,则必须用cursor,读者可以对比一下。

import pymysql
from sqlalchemy import create_engine

conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='test')
# engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
sql = "DROP TABLE IF EXISTS test_input"
cursor = conn.cursor()
cursor.execute(sql)

总结

本文主要介绍了ORM技术以及SQLAlchemy模块,并且展示了两个Python程序的实例,介绍了如何使用Pandas库实现MySQL数据库的读写。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python网页请求urllib2模块简单封装代码
Feb 07 Python
Python中Continue语句的用法的举例详解
May 14 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
初步剖析C语言编程中的结构体
Jan 16 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
python使用pymysql实现操作mysql
Sep 13 Python
Python实现的凯撒密码算法示例
Apr 12 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
复化梯形求积分实例——用Python进行数值计算
Nov 20 Python
pandas分批读取大数据集教程
Jun 06 Python
浅谈python中的多态
Jun 15 Python
Python中的变量与常量
Nov 11 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 #Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 #Python
python实现爬取百度图片的方法示例
Jul 06 #Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 #Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 #Python
python使用 zip 同时迭代多个序列示例
Jul 06 #Python
Python搭建Spark分布式集群环境
Jul 05 #Python
You might like
模仿OSO的论坛(三)
2006/10/09 PHP
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
php 无极分类(递归)实现代码
2010/01/05 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
2017/02/18 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
javascript 文档的编码问题解决
2009/03/01 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
VUE 动态组件的应用案例分析
2019/12/02 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
python的keyword模块用法实例分析
2015/06/30 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
2018/07/02 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
python无序链表删除重复项的方法
2020/01/17 Python
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
工业设计专业个人求职信范文
2013/12/28 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
留学顾问岗位职责
2014/04/14 职场文书
师范生自荐信模板
2014/05/28 职场文书
迎国庆演讲稿
2014/09/15 职场文书
2015年大学生工作总结
2015/04/21 职场文书
导游词之西安大清真寺
2019/12/17 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫