关于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中的私有属性
Aug 21 Python
python读取oracle函数返回值
Jul 18 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
python3.5基于TCP实现文件传输
Mar 20 Python
有关Python的22个编程技巧
Aug 29 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
pyttsx3实现中文文字转语音的方法
Dec 24 Python
Python 实现数据结构中的的栈队列
May 16 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
Python错误的处理方法
Jun 23 Python
字典算法实现及操作 --python(实用)
Mar 31 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水印技术
2007/02/14 PHP
php的ajax简单实例
2014/02/27 PHP
PHP-FPM的配置与优化讲解
2019/03/15 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
js中eval详解
2012/03/30 Javascript
javascript引擎长时间独占线程造成卡顿的解决方案
2014/12/03 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
2020/06/03 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
vue实现表格合并功能
2020/12/01 Vue.js
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
P/Invoke是什么
2015/07/31 面试题
自荐信模版
2013/10/24 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
大学生求职信范文应怎么写
2014/01/01 职场文书
七年级生物教学反思
2014/01/30 职场文书
洗发水广告词
2014/03/13 职场文书
人事代理委托书
2014/09/27 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
Redis RDB技术底层原理详解
2021/09/04 Redis
instantclient客户端 连接oracle数据库
2022/04/26 Oracle