(数据科学学习手札51)用pymysql来操控MySQL数据库
一、简介
pymysql是Python中专门用来操控MySQL数据库的模块,通过pymysql,可以编写简短的脚本来方便快捷地操控MySQL数据库,本文就将针对pymysql的基本功能进行介绍;
二、操控数据库
2.1 连接数据库
利用pymysql.connect(host,user,password,port,db)来实现对已知MySQL数据库的连接,其中各参数分别对应着目标数据库的各项属性,db用于指定要连接的database的名称,下面是一个示例:
要连接的数据库:

import pymysql '''连接数据库'''
try:
print('-'*200)
print('尝试连接数据库')
print('-'*200)
db = pymysql.connect(host='localhost',user='root',password='我的密码',port=3306,db='test')
print('连接成功!','\n',
'host:{}'.format(db.host),'\n',
'port:{}'.format(db.port),'\n',
'user:{}'.format(db.user),'\n',
'database:{}'.format(db.db)) except Exception as e:
print('因{},连接失败'.format(e))
finally:
print('-'*200,'\n','连接过程结束')
print('-'*200)
若连接成功,显示如下信息:

2.2 插入数据
在成功连接数据库之后,我们使用db.cursor()来获取数据库的操作游标:
'''获取操作游标'''
cur = db.cursor()
接下来我们使用.execute()来执行需要完成的SQL语句,其传入参数为字符串类型的SQL语句,譬如,下面的例子中我们创建一个新的表,并将sklearn中内置的鸢尾花数据传入进去:
from sklearn.datasets import load_iris '''获取鸢尾花数据,其中X,y为二维数组'''
X,y = load_iris(return_X_y=True)
'''建立指定鸢尾花类别名称的列表'''
Species = ['setosa','versicolor','virginica'] '''通过操作游标执行SQL语句,以创建iris表'''
cur.execute("CREATE TABLE IF NOT EXISTS iris"
"(Sepal_Length float,"
"Sepal_Width float,"
"Petal_Length float,"
"Petal_Width float,Species char(20)"
")") '''构造将X,y数据一次性插入iris的SQL语句'''
BaseSQL = "INSERT INTO iris VALUES" for i in range(X.shape[0]):
BaseSQL += "({},{},{},{},'{}'),".format(X[i,0],X[i,1],X[i,2],X[i,3],Species[y[i]]) '''去除末尾多余的逗号'''
BaseSQL = BaseSQL[:-1] '''执行插入鸢尾花数据的SQL语句'''
cur.execute(BaseSQL)
运行完上述语句,在已经连接数据库的navicat中查看iris表中的全部数据:
USE test;
SELECT * FROM iris;

这是会发现,查询结果只有一张空表,这是因为在执行完插入数据的语句后,并没有提交结果,使用.commit()向数据库提交结果:
'''提交结果'''
db.commit()
在navicat中再次查询得到想要的结果:

2.3 查询数据
查询功能是数据库中核心功能之一,查询取数也是数据分析人员在数据库上最常用的操作,在pymysql中想要完成查询取数的过程,要在执行SQL语句之后,对我们的游标对象使用.fetchall()方法来取得对应的查询结果:
'''查询取数'''
cur.execute("SELECT Species,COUNT(*) FROM iris GROUP BY Species") '''获取查询结果'''
results = cur.fetchall() print(results)

可以看到,取回的结果为一个规整的tuple对象,可以按照其格式打印出查询结果:
print('Species','|','Counts')
for result in results:
print('-'*20)
print(result[0],'|',result[1])
print('-'*20)

或者转换为其他格式保存为其他规整的格式以便进一步分析:
import pandas as pd df = pd.DataFrame(list(results),columns=['Species','Counts'])
print(df)

而关于其他对数据库的操作(如删除、更新等),与上面类似,只是涉及到更改数据库中数据时,不要忘记commit();
2.4 关闭数据库
在完成需要的操作后,不要忘记断开与数据库间的连接:
db.close()
以上就是本文的全部内容,如有笔误,望指出!
(数据科学学习手札51)用pymysql来操控MySQL数据库的更多相关文章
- (数据科学学习手札55)利用ggthemr来美化ggplot2图像
一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札49)Scala中的模式匹配
一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- (数据科学学习手札44)在Keras中训练多层感知机
一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...
- (数据科学学习手札42)folium进阶内容介绍
一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...
- (数据科学学习手札40)tensorflow实现LSTM时间序列预测
一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...
- (数据科学学习手札36)tensorflow实现MLP
一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...
- (数据科学学习手札32)Python中re模块的详细介绍
一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...
随机推荐
- Sybase常用时间日期函数
Sybase日期函数日期函数getdate()得到当前时间,可以设置得到各种时间格式.datepart(日期部分,日期)取指定时间的某一个部分,年月天时分秒.datediff(日期部分,日期1,日期2 ...
- 4 Dockerfile指令详解 && COPY 指令
COPY 指令将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置.比如: COPY package.json /usr/src/app/ ...
- nginx+php+swoole安装记录
领了台阿里服务器1vCPU 1G,做下测试研究. 系统 centos7,使用yum安装. Nginx yum install nginx ##开启nginx service nginx start 安 ...
- java内部类之成员内部类
内部类概念:顾名思义,就是将一个类定义在另一个个类内部.内部的类称之为内部类 . 内部类的主要特点:1.内部类可以很好的实现隐藏,可以使用protected.private修饰符.2.内部类可以直接访 ...
- Odoo中要根据某字段值作为条件判断值,但又不想在界面显示
在视图标签中包含这个field(包含这个字段才可以使用该字段),但其invisible属性设置为1,即:该字段不可见. <field name="字段" invisible= ...
- jquery mobile header title左对齐 button右对齐
<div data-theme="b" data-role="header" data-position="fixed"> &l ...
- 改变random.seed()种子值,获取不同的随机值
random.seed() random.seed()是随机数种子,也就是为随机数提供算法,完全相同的种子产生的随机数列是相同的, 所以如果想产生不同的随机数就需要用当前时间作为种子 一般情况下see ...
- PHP一个表单多个提交按钮解决方法
1.html页面<注:多个按钮的name值必须相同> <form action="{:U('Index/index')}" method="post&q ...
- git编译安装报错 http-push.c:20:19: 警告:expat.h:没有那个文件或目录
解决: [root@hdoop3 git-2.18.1]# yum install expat-devel
- 算法的泛化过程(摘自《STL源码剖析》)
将一个叙述完整的算法转化为程序代码,不是什么难事.然而,如何将算法独立与其所处理的数据结构之外,不受数据结构的羁绊呢?换个说法,如何将我们所写的程序算法适用于任何(或者大部分)未知的数据结构(比如ar ...