关于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使用xlrd实现检索excel中某列含有指定字符串记录的方法
May 09 Python
Python中的sort()方法使用基础教程
Jan 08 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
Python I/O与进程的详细讲解
Mar 08 Python
python matplotlib库直方图绘制详解
Aug 10 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
django迁移文件migrations的实现
Mar 31 Python
浅谈tensorflow模型保存为pb的各种姿势
May 25 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 curl的深入解析
2013/06/02 PHP
php基础教程
2015/08/26 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
Extjs4中的分页应用结合前后台
2013/12/13 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
js实现日历
2020/11/07 Javascript
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
Django contenttypes 框架详解(小结)
2018/08/13 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
大学生毕业求职的自我评价
2013/09/29 职场文书
导游个人求职信
2014/04/25 职场文书
大型公益活动策划方案
2014/08/20 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
个人先进事迹材料
2014/12/29 职场文书
会计主管竞聘书
2015/09/15 职场文书
Python学习之异常中的finally使用详解
2022/03/16 Python
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python