关于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中os操作文件及文件路径实例汇总
Jan 15 Python
python使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
深入理解Python3 内置函数大全
Nov 23 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
Python正则表达式实现简易计算器功能示例
May 07 Python
python中dict()的高级用法实现
Nov 13 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
Django Haystack 全文检索与关键词高亮的实现
Feb 17 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
详解Django中异步任务之django-celery
Nov 05 Python
Restful_framework视图组件代码实例解析
Nov 17 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数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
php compact 通过变量创建数组
2016/11/15 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
javascript getElementsByClassName函数
2010/04/01 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
Node.js模块加载详解
2014/08/16 Javascript
JavaScript实现常用二级省市级联下拉列表的方法
2015/03/25 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
python队列Queue的详解
2019/05/10 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python3进制之间的转换代码实例
2019/08/24 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
国外软件测试工程师面试题
2016/12/09 面试题
同事打架检讨书
2014/02/04 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
支教个人总结
2015/03/04 职场文书
小学班主任工作随笔
2015/08/15 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书