python如何连接mysql(python数据库编程入门)

python如何连接mysql(python数据库编程入门)

扫描文末二维码查看【Excel训练营课程】

本文主要讲解如何利用python中的pymysql库来对mysql数据库进行操作,大家在转行项目中也可以加入这一步操作,提高逼格的同时还能简化流程。

先看一下最常见的操作:

从数据库中select需要的字段(对数据简单聚合处理)

将查找的数据导出为本地文件(csv、txt、xlsx等)

通过pandas的read_excel(csv、txt)将本地文件转化成python中的变量,并对数据进行相应的处理和分析

将处理好的数据通过pandas的to_excel(csv、txt)导出为本地文件

但是大家不觉得第二步很多余吗?为什么还要先导出再导入,这个中间步骤纯属浪费时间啊,理想中的步骤应该是这样的

将mysql中的数据导入到python中

利用python处理分析数据

导出成excel报表

这么一看是不是感觉就舒服多了?那么问题来了,怎么实现直接把mysql中的数据直接导入python中呢?这就要讲到今天的重点了:

第一种方法:read_sql

第二种方法:pymysql

先看一下我们今天的数据库信息:host:192.168.0.***port:3306user:root密码:********

数据库:test表名:weather_test字段及数据:

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和pymysqlindex_col: 选择哪列作为indexcoerce_float:将数字形字符串转为floatparse_dates:将某列日期型字符串转换为datetime型数据columns:选择想要保留的列chunksize:每次输出多少行数据1.首先导入pandas和sqlalchemy

2.创建连接

3.编写sql代码,执行sql代码,获取返回的值

import pandas as pdimport sqlalchemyengine = sqlalchemy.create_engine(‘mysql pymysql://root:******@192.168.0.***:3306/test’)sql=”’select * from weather_test wherecreate_time between ‘2020-09-21’ and ‘2020-09-22’and city in (‘杭州’,’上海’)”’df = pd.read_sql(sql,engine)df利用pymysql建立连接并查询也是可以的

至此一次简单地利用pandas中read_sql方法从数据库获取数据就完成了

2

PyMySQL

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,可以方便的连接数据库并操作数据库1.安装首先打开cmd,输入 pip install pymysql 来安装pymysql这个库

2.利用pymysql操作数据库接下来打开jupyter notebook,开始尝试操作数据库2.1 首先导入pandas,pymysql

import pandas as pdimport pymysql2.2 接下来创建于数据库的连接

import pandas as pdimport pymysql# 打开数据库连接db = pymysql.connect(“192.168.0.***”, “root”, “******”, “test”, charset=’utf8′ )使用connect()方法可以建立与数据库的连接,其中需要的主要参数已经标注在图片上,charset建议选utf8,防止中文乱码,将建立好的连接对象赋值给db这个变量名2.3 使用cursor()方法获取操作游标

import pandas as pdimport 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代码

写一句简单地sql语句,目的是查上海和杭州在2020-09-21~2020-09-22这两天的天气,将写好的sql语句改为字符串格式并赋值给sql这个变量名,使用excute()这个方法可以通过定义好的游标来执行写好的sql语句,可以看到输出了一个数字4,代表查询出的数据集共包含4条数据。2.5 获取返回的查询结果

使用fetchall()方法可以通过定义好的游标来获取查询出的完整数据集,并赋值给变量名cds打印一下cds这个变量,可以看到数据已经获取到了,现在要将其变成我们常用的DataFrame格式除了fetchall()这个方法,还有fetchone()和fetchmany(size)这两种方法可以获取返回的数据fetchall():返回所有数据fetchone():返回下一条数据fetchmany(size):返回下size个数据2.6 将获取到的数据转换成DataFrame格式

将tuple格式的cds变量转换为list,再通过pandas中的DataFrame()方法,将cds转化为DataFrame格式,并改好列名,赋值给weather变量名输出weather看一下数据

2.7 关闭游标,关闭数据库连接

import pandas as pdimport pymysql# 打开数据库连接db = pymysql.connect(“192.168.0.***”, “root”, “******”, “test”, charset=’utf8′ )# 使用cursor()方法获取操作游标 cursor = db.cursor()sql = “””select * from weather_testwhere 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查询数据库的办法,其他增删改操作与此类似,大家可以自行发挥

-END –

爱数据 · Excel集训营

5天零基础入门Excel数据分析课程安排:DAY1:不再如此辛苦,Excel数据管理DAY2:学习硬技能,数据高效整理DAY3:职场必备,数据快速分析DAY4:一目了然轻松展示,数据呈现与图表美化DAY5:加薪升职,数字化仪表板扫描下方二维码了解课程详情

发表评论

登录后才能评论