关于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 相关文章推荐
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
Apr 19 Python
Python做智能家居温湿度报警系统
Sep 25 Python
python自动化生成IOS的图标
Nov 13 Python
Python模块、包(Package)概念与用法分析
May 31 Python
python实现邮件自动发送
Aug 10 Python
python基础教程之while循环
Aug 14 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
python 实现目录复制的三种小结
Dec 04 Python
Python中的__init__作用是什么
Jun 09 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
基于Python实现股票收益率分析
Apr 02 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
模仿OSO的论坛(一)
2006/10/09 PHP
php分页函数完整实例代码
2014/09/22 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
php实现的xml操作类
2016/01/15 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
仿微博字符限制效果实现代码
2012/04/20 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
javascript 实现 原路返回
2015/01/21 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python将多个excel表格合并为一个表格
2021/02/22 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
大学社团活动策划书
2014/01/26 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
承诺书样本
2014/08/30 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
人才市场接收函
2015/01/30 职场文书
个人工作保证书
2015/02/28 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript