关于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中的break、continue、exit()、pass全面解析
Aug 05 Python
django认证系统实现自定义权限管理的方法
Jul 16 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
浅谈python常用程序算法
Mar 22 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
python 装饰器的实际作用有哪些
Sep 07 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
Python实现自动玩连连看的脚本分享
Apr 04 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
PHP nl2br函数 将换行字符转成 <br>
2009/08/21 PHP
php源码的安装方法和实例
2019/09/26 PHP
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
详谈jQuery中的一些正则匹配表达式
2017/03/08 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
2017/12/28 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
Jquery如何使用animation动画效果改变背景色的代码
2020/07/20 jQuery
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
python实现查询IP地址所在地
2015/03/29 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
对python内置map和six.moves.map的区别详解
2018/12/19 Python
Python实现简易过滤删除数字的方法小结
2019/01/09 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
Python bisect模块原理及常见实例
2020/06/17 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
中学教师实习自我鉴定
2013/09/28 职场文书
承办会议欢迎词
2014/01/17 职场文书
会计专业自我评价
2014/02/12 职场文书
《美丽的小路》教学反思
2014/02/26 职场文书
社团活动总结模板
2014/06/30 职场文书
建筑安全责任书范本
2014/07/24 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL
Redis之RedisTemplate配置方式(序列和反序列化)
2022/03/13 Redis