pymysql是python中操作mysql的模块。

1.pymysql模块的安装

  1. pip3 install pymysql

也可以使用pycharm这个IDE工具来安装pymysql这个模块。

2.pymysql模块的使用

1.执行mysql语句,获取查询的结果

代码如下:

  1. #!/usr/bin/env python
  2. #_*_coding:utf-8_*_
  3. import pymysql
  4. #创建连接
  5. conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
  6. #创建游标
  7. cursor=conn.cursor()
  8. #执行mysql语句,并返回执行的结果
  9. res=cursor.execute("select name from db1")
  10. #打印执行的结果
  11. print(res)
  12. #把要执行的语句提交,否则无法保存新建或者修改数据
  13. conn.commit()
  14. #关闭游标
  15. cursor.close()
  16. #关闭连接
  17. conn.close()

执行结果为:

  1. 4

因为从db1.db1这张表中检索到四条数据,所以返回的值为4

  1. 需要注意的是,查询过程中存在中文的话,连接需要添加**"charset='utf-8'"**,否则中文会显示乱码

2.获取查询的数据

代码如下:

  1. #!/usr/bin/env python
  2. #_*_coding:utf-8_*_
  3. import pymysql
  4. #创建连接
  5. conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
  6. #创建游标
  7. cursor=conn.cursor()
  8. #执行mysql语句
  9. cursor.execute("select name from db1")
  10. #获取所有的执行结果
  11. res=cursor.fetchall()
  12. #打印获取到的执行结果
  13. print(res)
  14. #提交要执行的mysql指令
  15. conn.commit()
  16. #关闭游标
  17. cursor.close()
  18. #关闭连接
  19. conn.close()

执行结果为:

  1. (('xiaoming',), ('xiaobing',), ('xiaoyong',), ('xiaojian',))

可以看到,返回的结果是一个元组类型的数据.

还可以在创建游标的时候,使用选项来指定返回的结果为哪种数据类型:

  1. cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

使用这个指令可以把返回的结果变成字典类型。

在获取执行的结果时,可以指定获取的结果的条数,可以使用的选项如下:

  1. fetchone() 取得检索结果的一条数据
  2. fetchmany(n) 取得检索结果的n条数据
  3. fetchall() 取得检索结果的所有数据

需要注意的是,与读取文件时的指针类似.如果在同一段代码中,先使用fetchone()获取检索结果的第一条数据,

然后再使用fetchmany(2)的话,指针会在检索结果的当前位置向后读取执行结果,而不会从头开始重新读取检索的结果.

代码如下:

  1. #!/usr/bin/env python
  2. #_*_coding:utf-8_*_
  3. import pymysql
  4. #创建连接
  5. conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
  6. #创建游标
  7. cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
  8. #执行mysql语句,并返回执行的结果
  9. cursor.execute("select name from db1")
  10. #取执行结果的第一条数据,并打印
  11. res1=cursor.fetchone()
  12. print("this is first result:",res1)
  13. #从剩下的执行结果中再取两条数据,并打印
  14. res2=cursor.fetchmany(2)
  15. print("this is second result:",res2)
  16. #再从剩下的数据中取所有的数据,并打印
  17. res3=cursor.getchall()
  18. print("this is third result:",res3)
  19. #提交要执行的命令
  20. conn.commit()
  21. #关闭游标
  22. cursor.close()
  23. #关闭连接
  24. conn.close()

执行结果如下:

  1. this is first result: {'name': 'xiaoming'}
  2. this is second result: [{'name': 'xiaobing'}, {'name': 'xiaoyong'}]
  3. this is third result: [{'name': 'xiaojian'}]

第一次取第一行的检索结果,第二次取两行的时候,第三次取剩下的所有的结果.

因为数据表中只有四条记录,而第一次已经取走一行了,

第二次从第一次取得的结果又向后继续取两个值,所以最后取所有的值时,只剩下一个,所以第三次取得一个值。

在创建游标的时候,指定了返回的数据类型为字典类型,所以返回的结果是字典数据类型。

在使用fetch时,按照顺序进行取得数据,可以使用cursor.scroll(num,mode)来移动游标位置

  1. mode指定位置,是相对当前位置,还是绝对位置
  2. num指定移动的位数,正数向后移动,负数向前移动

例如:

  1. cursor.scroll(1,mode="relative") #相对于当前的指针位置取一个值
  2. cursor.scroll(2,mode="absolute") #在当前的绝对位置取一个值

"relative"与"absolute"的区别,看下面两段代码:

第一段代码:

  1. #!/usr/bin/env python
  2. #_*_coding:utf-8_*_
  3. import pymysql
  4. conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
  5. cursor=conn.cursor()
  6. cursor.execute("SELECT * FROM db1")
  7. cursor.fetchone()
  8. cursor.scroll(1,mode="relative")
  9. print(cursor.fetchone())
  10. conn.commit()
  11. cursor.close()
  12. conn.close()

执行结果如下:

  1. (3, 'xiaoyong', 'xiaoyong')

第二段代码:

  1. #!/usr/bin/env python
  2. #_*_coding:utf-8_*_
  3. import pymysql
  4. conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
  5. cursor=conn.cursor()
  6. cursor.execute("SELECT * FROM db1")
  7. cursor.fetchone()
  8. cursor.scroll(1,mode="absolute")
  9. print(cursor.fetchone())
  10. conn.commit()
  11. cursor.close()
  12. conn.close()

执行结果如下:

  1. (2, 'xiaobing', 'xiaobing')

3.获取新创建数据的自增ID

代码如下:

  1. #!/usr/bin/env python
  2. # _*_coding:utf-8_*_
  3. import pymysql
  4. conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",passwd="",db="db1")
  5. cursor=conn.cursor()
  6. cursor.execute('INSERT INTO db1(name,password) VALUES("xiaofei","xiaofei")')
  7. conn.commit()
  8. cursor.close()
  9. conn.close()
  10. res=cursor.lastrowid
  11. print(res)

执行结果为:

  1. 5

数据表db1中本来有四条数据,现在新增一条,其ID为自增类型,所以返回结果为5

python3操作pymsql模块的更多相关文章

  1. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  2. python3操作redis

    redis也被称为缓存 1.redis是一个key-value存储系统,没有ForeignKey和ManyToMany的字段. 2.在redis中创建的数据彼此之间是没有关系的,所以也被称为是非关系型 ...

  3. python基础系列教程——Python3.x标准模块库目录

    python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...

  4. Python3中正则模块re.compile、re.match及re.search函数用法详解

    Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...

  5. python3操作mysql教程

    一.下载\安装\配置 1. python3 Python3下载网址:http://www.python.org/getit/ 当前最新版本是python3.2,下载地址是 http://www.pyt ...

  6. python3.7 time模块

    #!/usr/bin/env python __author__ = "lrtao2010" #python3.7 time模块 #time模块没有time.py文件,是内置到解释 ...

  7. Python3:urllib模块的使用

    Python3:urllib模块的使用1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=N ...

  8. Python3之时间模块详述

    Python3之时间模块  time & datetime & calendar 一. 概述 python 提供很多方式处理日期与时间,转换日期格式是一个常见的功能. 时间元组:很多p ...

  9. python之文件系统操作(os模块)

    文件系统操作(os模块) import os file_name = "D:\\test_data\\1.txt" file_name_2 = "D:\\test_dat ...

随机推荐

  1. JavaScript for in的缺陷

    for in 语句用来列举对象的属性(成员),如下 1 2 3 4 5 6 7 var obj = { name:"jack",       getName:function(){ ...

  2. LABjs、RequireJS、SeaJS 哪个最好用?为什么?- 玉伯的回答

    LABjs 的核心是 LAB(Loading and Blocking):Loading 指异步并行加载,Blocking 是指同步等待执行.LABjs 通过优雅的语法(script 和 wait)实 ...

  3. sqlserver 重置标识列

    重置标识信息:DBCC CHECKIDENT('表名', RESEED,0) 检查标识信息:DBCC CHECKIDENT('SysModule', NORESEED)

  4. 基于Windows下浏览器无法正常打开的解决方案

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  5. Centos/Rhel7部署Zabbix监控(部署篇之服务器篇)

    Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决 ...

  6. c语言sizeof用法(32位机)

  7. 使用nginx作为websocket的proxy server

    blog.csdn.net/zhx6044/article/details/50278765 WebSocket WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选 ...

  8. SMTP错误码建议解决方法

    https://wenku.baidu.com/view/0af30e01e87101f69e3195b8.html SMTP 错误码 / 建议解决方法 错误总表 101 Cannot Open Co ...

  9. Block 的使用时机

    Block 一般是用来表示.简化一小段的程式码,它特别适合用来建立一些同步执行的程式片段.封装一些小型的工作或是用来做为某一个工作完成时的回传呼叫(callback) . 在新的iOS API中blo ...

  10. 【开发技术】java异常的捕获与抛出原则

    在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...