关于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 25 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
Python做简单的字符串匹配详解
Mar 21 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
详解python实现数据归一化处理的方式:(0,1)标准化
Jul 17 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
基于python连接oracle导并出数据文件
Apr 28 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
OpenCV-Python模板匹配人眼的实例
Jun 08 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
thinkphp模板继承实例简述
2014/11/26 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
python生成器与迭代器详解
2019/01/01 Python
python的依赖管理的实现
2019/05/14 Python
python实现串口通信的示例代码
2020/02/10 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
建筑个人求职信范文
2014/01/25 职场文书
个人近期表现材料
2014/02/11 职场文书
保密协议书范本
2014/04/22 职场文书
老干部工作先进事迹
2014/08/17 职场文书
会计学习心得体会
2014/09/09 职场文书
交通安全月活动总结
2015/05/08 职场文书
正规借条模板
2015/05/26 职场文书
政审证明材料
2015/06/19 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
python_tkinter弹出对话框创建
2022/03/20 Python