一、简介

  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数据库的更多相关文章

  1. (数据科学学习手札55)利用ggthemr来美化ggplot2图像

    一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...

  2. (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

    一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...

  3. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  4. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

  5. (数据科学学习手札44)在Keras中训练多层感知机

    一.简介 Keras是有着自主的一套前端控制语法,后端基于tensorflow和theano的深度学习框架,因为其搭建神经网络简单快捷明了的语法风格,可以帮助使用者更快捷的搭建自己的神经网络,堪称深度 ...

  6. (数据科学学习手札42)folium进阶内容介绍

    一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...

  7. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  8. (数据科学学习手札36)tensorflow实现MLP

    一.简介 我们在前面的数据科学学习手札34中也介绍过,作为最典型的神经网络,多层感知机(MLP)结构简单且规则,并且在隐层设计的足够完善时,可以拟合任意连续函数,而除了利用前面介绍的sklearn.n ...

  9. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

随机推荐

  1. Python学习---Model拾遗[1]180318

    Model: 强大的数据库操作,弱小的数据验证 Form:  强大的数据验证 ModelForm: 强大的数据验证 + 弱小的数据库操作 Model拾遗 Model基本操作 1. 创建数据库表2. 修 ...

  2. (转)如何解决VC中的警告warning C4251 needs to have dll-interface

    这通常是由于以数据成员方式在DLL导出类中使用了模板类造成的.比如: #include <iostream> #include <vector> using namespace ...

  3. Java面试基本知识

    Java基本知识 基本知识 服务器:Tomcat 支持Servlet jsp JBoss 开源应用服务器 Apache:最广泛的http服务器,只支持静态网页 String是长度不可变,用+=的时候会 ...

  4. Objective-C与JavaScript交互的那些事

    http://www.cocoachina.com/ios/20160127/15105.html 最近公司的运营瞎搞了个活动,其活动要服务端提供数据支持,web前端在微信公众账号内作为主要的运营阵地 ...

  5. 简析Chrome和Webkit的渊源

    http://www.3lian.com/edu/2012/05-25/28803.html 互联网的浪潮从未停息,而用以网上冲浪的冲浪板也一直在变得愈加精良.自人们进入互联网时代以来,即已经发生了三 ...

  6. Mybatis Plus启动注入 SQL 原理分析

    1) 问题: xxxMapper 继承了 BaseMapper<T>, BaseMapper 中提供了通用的 CRUD 方法, 方法来源于 BaseMapper, 有方法就必须有 SQL, ...

  7. Luogu_4886 快递员

    Luogu_4886 快递员 一道淀粉质的题目. 先考虑最简单的算法,那便是对每个点都求一边.时间复杂度O(NM) 然后如果我们把每个点的结果对应一个高度,我们会发现.最优解是在这个对应高度形成的三维 ...

  8. JNI由浅入深_7_c调用Java方法一

    1.在Java中声明方法 <span style="font-size:14px;">/** * javah -encoding utf-8 -jni com.exam ...

  9. PCA方法从原理到实现

    一.简介 PCA(Principal Components Analysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题 ...

  10. FD.io社区中国行暨未来网络技术沙龙·南京站 会议小结

    What is FD.io VPP? FD.io VPP(Fast Data Input/Output Vector Packet Processing)is a new network multi- ...