↑↑↑关注后"星标"简说Python
人人都可以简单入门Python、爬虫、数据分析
简说Python推荐
作者:Tao 来源:知乎
整理:凹凸数据
One old watch, like brief python
大家好,我是老表~
本文主要讲解如何利用python中的pymysql库来对mysql数据库进行操作。
先看一下最常见的操作:
从数据库中select需要的字段(对数据简单聚合处理)
将查找的数据导出为本地文件(csv、txt、xlsx等)
通过pandas的read_excel(csv、txt)将本地文件转化成python中的变量,并对数据进行相应的处理和分析
将处理好的数据通过pandas的to_excel(csv、txt)导出为本地文件
将mysql中的数据导入到python中
利用python处理分析数据
导出成excel报表
第一种方法:read_sql
第二种方法:pymysql
先看一下我们今天的数据库信息: host: 192.168.0.*** port:3306 user:root 密码:********
![220a0f00a8be56d9b18660b179cc347e.png](https://i-blog.csdnimg.cn/blog_migrate/c170f3c548aae56ef4d9a59134fe96af.jpeg)
数据库:test 表名:weather_test 字段及数据:
![6bfeae634dc8e99388c5081d1d87ce0d.png](https://i-blog.csdnimg.cn/blog_migrate/07b8753d1b6765bf538843ad11ce1bfb.jpeg)
![9fd980322b401ddc1c96eef18fcaf5fd.png](https://i-blog.csdnimg.cn/blog_migrate/4561d24e48a6d0df574790b087e7b7a2.jpeg)
1
read_sql()
read_sql(sql,con,index_col='None',coerce_float='True',params='None',parse_dates='None',columns='None',chunksize:None='None')
read_sql方法是pandas中用来在数据库中执行指定的SQL语句查询或对指定的整张表进行查询,以
DataFrame 的类型
返回查询结果.
其中各参数意义如下:
- sql:需要执行的sql语句
- con:连接数据库所需的engine,用其他数据库连接的包建立,例如SQLalchemy和pymysql
- index_col: 选择哪列作为index
- coerce_float:将数字形字符串转为float
- parse_dates:将某列日期型字符串转换为datetime型数据
- columns:选择想要保留的列
- chunksize:每次输出多少行数据
![ff5955c8ebd0ddfb61faabf3738d2a1f.png](https://i-blog.csdnimg.cn/blog_migrate/8052250b2cfffd497cb5b961680703ff.jpeg)
import pandas as pd
import sqlalchemy
engine = sqlalchemy.create_engine('mysql+pymysql://root:******@192.168.0.***:3306/test')
sql='''
select * from weather_test where
create_time between '2020-09-21' and '2020-09-22'
and city in ('杭州','上海')
'''
df = pd.read_sql(sql,engine)
df
利用pymysql建立连接并查询也是可以的
![6dded4418dd358f5047e147d12b7e0d5.png](https://i-blog.csdnimg.cn/blog_migrate/c6eaed21f0c0c0c0ea571d338b094dca.jpeg)
2
PyMySQL
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,可以方便的连接数据库并操作数据库1.安装
首先打开cmd,输入 pip install pymysql 来安装pymysql这个库![317d3a3ec144f5f72e0c242e8c98a30e.png](https://i-blog.csdnimg.cn/blog_migrate/0b8acbcdc2dd8766fdb31775fb3b1fc1.jpeg)
2.利用pymysql操作数据库
接下来打开jupyter notebook,开始尝试操作数据库 2.1 首先导入pandas,pymysqlimport pandas as pd
import pymysql
import pandas as pd
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.0.***", "root", "******", "test", charset='utf8' )
使用connect()方法可以建立与数据库的连接,其中需要的主要参数已经标注在图片上,
charset建议选utf8,防止中文乱码
,
将建立好的连接对象赋值给db这个变量名
2.3 使用cursor()方法获取操作游标
import pandas as pd
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.0.***", "root", "******", "test", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次一行或者多行前进或向后浏览数据的能力。
可以把游标当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理,通俗来说就是,
操作数据和获取数据库结果都要通过游标来操作。
如果不获取游标,我们就没法获得查询出来的数据。
最常用的也是默认的游标就是cursor,
返回的数据格式为tuple
,
其余的游标类型还有DictCursor,SSCursor,SSDictCursor等,
SS开头的游标称为流式游标,Cursor和DictCursor游标可以一次性返回所有的数据,流式游标智能一条一条得返回查询数据,所以这类游标适用于内存低、网络带宽小、数据量大的应用场景中。
DictCursor:返回字典(Dict)格式的数据 SSCursor:流式游标返回元组(Tuple)格式数据 SSDictCursor:流式游标返回字典(Dict)格式数据
使用其他游标时,只用在cursor()方法中加入相应的参数即可
cursor = db.cursor(pymysql.cursors.SSDictCursor)
2.4 编写sql代码,执行sql代码
![1637a65766aef8a3335279f7588f8f16.png](https://i-blog.csdnimg.cn/blog_migrate/12b5afba2de7352f4b609d98fef7f8f9.jpeg)
fetchall():返回所有数据 fetchone():返回下一条数据 fetchmany(size):返回下size个数据2.6 将获取到的数据转换成DataFrame格式
![b83de847d9c4b0d153b05c505961bd43.png](https://i-blog.csdnimg.cn/blog_migrate/499bbb9f3853b04b6fbfe642cb45ab1d.jpeg)
![3f3caf18e5ab4253e19ec64d1b55ec38.png](https://i-blog.csdnimg.cn/blog_migrate/64f27727cec38d331bf4c672a489fb88.jpeg)
![fac4b0952c7d864a60f2d1a4dc657ae9.png](https://i-blog.csdnimg.cn/blog_migrate/4fbf57b6b581d1bab56a56e3ee2b4098.jpeg)
import pandas as pd
import pymysql
# 打开数据库连接
db = pymysql.connect("192.168.0.***", "root", "******", "test", charset='utf8' )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
sql = """
select * from weather_test
where create_time between '2020-09-21' and '2020-09-22'
and city in ('上海','杭州')
"""
cursor.execute(sql)
cds = cursor.fetchall()
weather = pd.DataFrame(list(cds),columns=['ID','时间','省份','城市','最高温度','最低温度','白天天气','夜间天气','风力','风向'])
cursor.close() # 关闭游标
db.close() # 关闭数据库连接
使用pymysql创建一个connect对象的时候,就已经和mysql之间创建了一个tcp的长连接,只要
不调用这个对象的close方法,这个长连接就不会断开
,就会一直占用资源,所以执行完之后别忘了关闭游标和数据库连接
以上只是最简单的使用python查询数据库的办法,其他增删改操作与此类似,大家可以自行发挥
简说Python
长按扫码关注,一起学Python
学习更多:整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了