关于pymysql模块的使用以及代码详解


Posted in Python onSeptember 01, 2019

pymysql模块的使用

查询一条数据fetchone()

from pymysql import *

conn = connect(
  host='127.0.0.1',
  port=3306, user='root',
  password='123456',
  database='itcast',
  charset='utf8')

# 创建游标
c = conn.cursor()
# 执行sql语句
c.execute("select * from student")
# 查询一行数据
result = c.fetchone()
print(result)
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
"""
(1, '张三', 18, b'\x01')
"""

查询多条数据fetchall()

from pymysql import *

conn = connect(
  host='127.0.0.1',
  port=3306, user='root',
  password='123456',
  database='itcast',
  charset='utf8')

# 创建游标
c = conn.cursor()
# 执行sql语句
c.execute("select * from student")
# 查询多行数据
result = c.fetchall()
for item in result:
  print(item)
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
"""
(1, '张三', 18, b'\x01')
(2, '李四', 19, b'\x00')
(3, '王五', 20, b'\x01')
"""

更改游标的默认设置,返回值为字典

from pymysql import *

conn = connect(
  host='127.0.0.1',
  port=3306, user='root',
  password='123456',
  database='itcast',
  charset='utf8')

# 创建游标,操作设置为字典类型
c = conn.cursor(cursors.DictCursor)
# 执行sql语句
c.execute("select * from student")
# 查询多行数据
result = c.fetchall()
for item in result:
  print(item)
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()
"""
{'id': 1, 'name': '张三', 'age': 18, 'sex': b'\x01'}
{'id': 2, 'name': '李四', 'age': 19, 'sex': b'\x00'}
{'id': 3, 'name': '王五', 'age': 20, 'sex': b'\x01'}
"""

返回一条数据时也是一样的。返回字典或者时元组看个人需要。

2|2使用数据操作语句

执行增加、删除、更新语句的操作其实是一样的。只写一个作为示范。

from pymysql import *

conn = connect(
  host='127.0.0.1',
  port=3306, user='root',
  password='123456',
  database='itcast',
  charset='utf8')

# 创建游标
c = conn.cursor()
# 执行sql语句
c.execute("insert into student(name,age,sex) values (%s,%s,%s)",("小二",28,1))
# 提交事务
conn.commit()
# 关闭游标
c.close()
# 关闭数据库连接
conn.close()

和查询语句不同的是必须使用commit()提交事务,否则操作就是无效的。

3|0编写数据库连接类

普通版

MysqlHelper.py

from pymysql import connect,cursors

class MysqlHelper:
  def __init__(self,
         host="127.0.0.1",
         user="root",
         password="123456",
         database="itcast",
         charset='utf8',
         port=3306):
    self.host = host
    self.port = port
    self.user = user
    self.password = password
    self.database = database
    self.charset = charset
    self._conn = None
    self._cursor = None

  def _open(self):
    # print("连接已打开")
    self._conn = connect(host=self.host,
               port=self.port,
               user=self.user,
               password=self.password,
               database=self.database,
               charset=self.charset)
    self._cursor = self._conn.cursor(cursors.DictCursor)

  def _close(self):
    # print("连接已关闭")
    self._cursor.close()
    self._conn.close()

  def one(self, sql, params=None):
    result: tuple = None
    try:
      self._open()
      self._cursor.execute(sql, params)
      result = self._cursor.fetchone()
    except Exception as e:
      print(e)
    finally:
      self._close()
    return result

  def all(self, sql, params=None):
    result: tuple = None
    try:
      self._open()
      self._cursor.execute(sql, params)
      result = self._cursor.fetchall()
    except Exception as e:
      print(e)
    finally:
      self._close()
    return result

  def exe(self, sql, params=None):
    try:
      self._open()
      self._cursor.execute(sql, params)
      self._conn.commit()
    except Exception as e:
      print(e)
    finally:
      self._close()

该类封装了fetchone、fetchall、execute,省去了数据库连接的打开和关闭和游标的打开和关闭。

下面的代码是调用该类的小示例:

from MysqlHelper import *

mysqlhelper = MysqlHelper()
ret = mysqlhelper.all("select * from student")
for item in ret:
  print(item)
"""
{'id': 1, 'name': '张三', 'age': 18, 'sex': b'\x01'}
{'id': 2, 'name': '李四', 'age': 19, 'sex': b'\x00'}
{'id': 3, 'name': '王五', 'age': 20, 'sex': b'\x01'}
{'id': 5, 'name': '小二', 'age': 28, 'sex': b'\x01'}
{'id': 6, 'name': '娃哈哈', 'age': 28, 'sex': b'\x01'}
{'id': 7, 'name': '娃哈哈', 'age': 28, 'sex': b'\x01'}
"""

上下文管理器版

mysql_with.py

from pymysql import connect, cursors

class DB:
  def __init__(self,
         host='localhost',
         port=3306,
         db='itcast',
         user='root',
         passwd='123456',
         charset='utf8'):
    # 建立连接
    self.conn = connect(
      host=host,
      port=port,
      db=db,
      user=user,
      passwd=passwd,
      charset=charset)
    # 创建游标,操作设置为字典类型
    self.cur = self.conn.cursor(cursor=cursors.DictCursor)

  def __enter__(self):
    # 返回游标
    return self.cur

  def __exit__(self, exc_type, exc_val, exc_tb):
    # 提交数据库并执行
    self.conn.commit()
    # 关闭游标
    self.cur.close()
    # 关闭数据库连接
    self.conn.close()

如何使用:

from mysql_with import DB

with DB() as db:
  db.execute("select * from student")
  ret = db.fetchone()
  print(ret)

"""
{'id': 1, 'name': '张三', 'age': 18, 'sex': b'\x01'}
"""

以上就是本次介绍的全部知识点内容,感谢大家的阅读和对三水点靠木的支持。

Python 相关文章推荐
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
python使用Flask操作mysql实现登录功能
May 14 Python
详解python3中tkinter知识点
Jun 21 Python
python 获取url中的参数列表实例
Dec 18 Python
Python制作exe文件简单流程
Jan 24 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
python启动应用程序和终止应用程序的方法
Jun 28 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
Python3 webservice接口测试代码详解
Jun 23 Python
使用python创建股票的时间序列可视化分析
Mar 03 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 #Python
Python 使用多属性来进行排序
Sep 01 #Python
详解一种用django_cache实现分布式锁的方式
Sep 01 #Python
python实现多进程通信实例分析
Sep 01 #Python
python输出带颜色字体实例方法
Sep 01 #Python
基于Django框架的权限组件rbac实例讲解
Aug 31 #Python
Django之PopUp的具体实现方法
Aug 31 #Python
You might like
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
PHP array_push 数组函数
2009/12/26 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
js实现简单的可切换选项卡效果
2015/04/10 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
Angular实现响应式表单
2017/08/04 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
实例讲解Python中函数的调用与定义
2016/03/14 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
python使用epoll实现服务端的方法
2018/10/16 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
大三学习计划书范文
2014/05/02 职场文书
三好学生竞选稿
2015/11/21 职场文书
python munch库的使用解析
2021/05/25 Python
python 爬取天气网卫星图片
2021/06/07 Python