如何利用Python中的pymysql库来操作Mysql数据库,看这篇就够啦~

news2024/12/29 10:38:19

 为了使python连接上数据库,你需要一个驱动,这个驱动是用于与数据库交互的库,本文是向大家介绍了如何利用python中的pymysql库来操作mysql数据库。


1、什么是pymysql?

pymysql是从python连接到mysql数据库服务器的接口, 简单理解就是,pymysql是python操作mysql数据库的三方模块,可以在python中连接数据库写mysql命令,它是一个纯python库。

2、安装pymysql

可以通过下面的命令来进行安装pymysql模块:

pip install pymysql

3、连接数据库

安装好pymysql后,在python程序中可以用 import pymysql 来导入模块。

在连接数据库前,首先要确定数据库服务端已启动。在数据库中有已经创建好的数据库,这里连接数据库‘mydb’,使用的用户名为‘root’,密码为‘mysql’。

比较常用的参数包括:

  • host:数据库主机名.默认是用本地主机
  • user:数据库登陆名.默认是当前用户
  • password:数据库登陆的秘密.默认为空
  • database:要使用的数据库名.没有默认值
  • port:MySQL服务使用的TCP端口.默认是3306
  • charset:数据库编码
# 导入pymysql
import pymysql

# 打开数据库连接
conn = pymysql.connect(
    host = '127.0.0.1',   # 服务端地址
    port = 3306,    # 服务端端口
    user = 'root',   # 用户名		
    password = 'mysql',   # 密码
    database = 'mydb',   # 要连接的数据库
    charset = 'utf8' ,   # 设置数据库编码
    cursorclass=pymysql.cursors.DictCursor # 记录结果,字典显示
)

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()

# 关闭数据库连接
conn.close()

上面的示例中有一个游标的概念,相当于光标的上下移动,每移动一次代表一条记录。在pymysql中,对于select等操作返回的结果都可以通过游标的移动配合相应方法函数来进行读取。

4、sql注入

如果某些sql语句要进行字符串拼接,那么一定要使用pymysql提供的execute()方法进行拼接,不要去用python中的%或format()方法,这可能导致出现sql注入问题带来不安全的隐患。

# 导入pymysql
import pymysql

# 打开数据库连接
conn = pymysql.connect(
    host = '127.0.0.1',   # 服务端地址
    port = 3306,    # 服务端端口
    user = 'root',   # 用户名		
    password = 'mysql',   # 密码
    database = 'mydb',   # 要连接的数据库
    charset = 'utf8' ,   # 设置数据库编码
    cursorclass=pymysql.cursors.DictCursor # 记录结果,字典显示
)

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()

# 执行sql
sql = "select * from t1 where id=%s"
# 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题
res = cursor.execute(sql,("1",))  

print(res) # 1 查出一条记录
# 拿到所有记录的结果
print(cursor.fetchall()) 

# 关闭游标
cursor.close()  
conn.close()

5、事务提交

执行update/insert/delete之类的操作时,必须使用conn.commit()进行事务提交后才能生效。或者在实例化conn对象时为它指定auto_commit参数为true即可自动提交事务。当操作出现问题时,可以使用conn.rollback()进行事务回滚。

# 导入pymysql
import pymysql

# 打开数据库连接
conn = pymysql.connect(
    host = '127.0.0.1',   # 服务端地址
    port = 3306,    # 服务端端口
    user = 'root',   # 用户名		
    password = 'mysql',   # 密码
    database = 'mydb',   # 要连接的数据库
    charset = 'utf8' ,   # 设置数据库编码
    cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
    autocommit = True # 自动提交
)

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()

# 执行sql
sql = "insert into t1(name) values(%s)"
# 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题
res = cursor.execute(sql,("新记录",))  

print(res) # 1 成功插入一条记录
print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号
print(cursor.fetchall())

# conn.commit()  # 手动提交
cursor.close()
conn.close()

6、提交多条

cursor.executemany()方法可实现一次性提交多条sql。

# 导入pymysql
import pymysql

# 打开数据库连接
conn = pymysql.connect(
    host = '127.0.0.1',   # 服务端地址
    port = 3306,    # 服务端端口
    user = 'root',   # 用户名		
    password = 'mysql',   # 密码
    database = 'mydb',   # 要连接的数据库
    charset = 'utf8' ,   # 设置数据库编码
    cursorclass=pymysql.cursors.DictCursor, # 记录结果,字典显示
    autocommit = True # 自动提交
)

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()

# 执行sql
sql = "insert into t1(name) values(%s)"  # 同一条命令,执行3次
# 提交执行,返回sql影响成功的行数 这里拼接能预防sql注入问题
res = cursor.executemany(sql,[("新记录1"),("新纪录2"),("新纪录3")])  

print(res) # 3 成功插入三条记录
print(cursor.lastrowid) #在插入语句后查看,查看最后一条记录的行号
print(cursor.fetchall())

cursor.close()
conn.close()

7、游标

获取到一条记录后,我们可以控制游标移动,也可以控制查看游标后的多少条记录,游标每移动一次代表一条记录

注:游标移动的条数即为记录的条数,如果移动值为负N就代表上N条记录

cursor.scroll(3,mode='absolute')    游标以绝对位置向后移动3条记录
cursor.scroll(3,mode='relative')    游标以当前位置向后移动3条记录

如果想获取记录,可使用以下三个方法

cursor.fetchone()    # 获取第一条记录,游标向下移动一行
cursor.fetchmany(2)    # 获取接下来的两条记录,游标向下移动两行
cursor.fetchall()    # 获取全部记录,游标移动到末尾,返回的是一个列表

8、DBUtils

使用DBUtils的连接池来与MySQL服务端建立链接,避免了频繁的socket链接请求,这常用于并发性的访问。

首先,通过下面的命令进行安装:

pip install dbutils

使用方法:

import pymysql
from dbutils.pooled_db import PooledDB

class MySqlPool(object):
    config = {
        "creator": pymysql,  # 使用连接数据库的模块
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "mysql",
        "db": "mydb",
        "charset": "utf8",
        "autocommit": True,
        "mincached": 10,  # 启动时开启的闲置连接数量(缺省值 0 开始时不创建连接)
        "maxconnections": 70,  # 连接池最大连接数量
        "maxcached": 10,  # 连接池中允许的闲置的最多连接数量
        "maxshared": 10,  # 共享连接数允许的最大数量(缺省值 0 代表所有连接都是专用的)如果达到了最大数量,被请求为共享的连接将会被共享使用
        "blocking": True,  # 设置在连接池达到最大数量时的行为(缺省值 0 或 False 代表返回一个错误<toMany......> 其他代表阻塞直到连接数减少,连接被分配)
        "maxusage": 0,  # 单个连接的最大允许复用次数(缺省值 0 或 False 代表不限制的复用).当达到最大数时,连接会自动重新连接(关闭和重新打开)
        "setsession": [],  # 一个可选的SQL命令列表用于准备每个会话,如["set datestyle to german", ...],常用于做初始化命令
        "cursorclass": pymysql.cursors.DictCursor  # 返回类型,dict
    }

    pool = PooledDB(**config)  # 单例模式创建出池子

    def get_db(self):
        self.conn = MySqlPool.pool.connection()
        self.cursor = self.conn.cursor()
        return self

    def close(self):
        self.cursor.close()
        self.conn.close()

    def __enter__(self):
        return self.get_db()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()


# 使用方式一
with MySqlPool() as db:
    db.cursor.execute("select * from t1;")
    print(db.cursor.fetchall())

# 使用方式二
db = MySqlPool().get_db()
db.cursor.execute("insert into t1 (user_name,user_password,user_type) values ('aaa',123,1);")
print(db.cursor.fetchall())
db.close()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

上门服务小程序|东邻到家系统|上门服务系统包含哪些功能?

使用东郊到家小程序&#xff0c;只需要一键预约即可在工作之余、休息娱乐的时候&#xff0c;点一个理按疗摩技师&#xff0c;做一个SPA&#xff0c;缓解工作压力&#xff0c;不失为一种享受&#xff0c;并且上门服务小程序可以为技师或从业岗位人员提供就业服务&#xff0c;线上…

抖音seo优化源代码搭建+抖音小程序私有化开源部署

抖音seo优化源码&#xff0c;抖音seo矩阵系统搭建&#xff0c;抖音账号矩阵系统开发&#xff0c;企业在做账号矩阵过程中&#xff0c;最头疼的莫过于私域线索转化&#xff0c;作为开发者都知道&#xff0c;目前市面上我们了解的矩阵系统除了挂载POI信息外&#xff0c;无法挂载留…

一篇关于 ApiKit 的简单介绍

简介 本文介绍 ApiKit 工具&#xff0c;它是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台。 一、常用解决方案 使用 Swagger 管理 API 文档 使用 Postman 调试 API 使用 mockjs 等工具 Mock API 数据 使用 JMeter 做 API 自动化测试 二、存在的问题 维护…

ffmpeg学习日记122-视频-获取视频的解码器,yuv格式名称,理解编码格式,封装格式,yuv格式的关系

Author: wencoo Blog&#xff1a;https://wencoo.blog.csdn.net/ Date: 25/05/2023 Email: jianwen056aliyun.com Wechat&#xff1a;wencoo824 QQ&#xff1a;1419440391 Details:文章目录 正文 或 背景获取像素格式&#xff0c;也就是yuv排列格式获取解码器id获取输出文件的封…

景区上线智慧客流人数采集分析系统的根本原因

智慧客流量采集系统是一种高效、智能的客流量采集解决方案&#xff0c;可以实现客流量的实时监控、数据分析和预测&#xff0c;提高服务质量、降低管理成本、提高安全性等优势。该系统适用于各种场所&#xff0c;如景区、商场、服务区、机场等。 AI客流视觉监控 一、智慧客流量…

安科瑞电力监控系统和五防系统在锡林郭勒项目的应用

摘要&#xff1a;随着电力、计算机、信息和网络等技术的不断发展&#xff0c;推动了电力监控的快速发展&#xff0c;人们对电力系统运行的安全性以及稳定性的要求越来越高。本文针对锡林郭勒供配电系统特点及供配电系统高可靠性的要求&#xff0c;提出了保护类、监测类和防误闭…

ASEMI代理长电MCR100-6可控硅的性能与应用分析

编辑-Z 本文主要介绍了新型MCR100-6晶闸管的性能与应用。首先&#xff0c;从晶闸管的基本原理和结构出发&#xff0c;分析了MCR100-6晶闸管的性能特点&#xff1b;其次&#xff0c;探讨了MCR100-6晶闸管在各种电子电路中的应用&#xff1b;最后&#xff0c;对MCR100-6晶闸管的…

档案馆建设标准条文说明

第一章 总则 第一条 本条阐明了本标准的编制目的。 中国是一个历史悠久的文明古国&#xff0c;档案事业的发展源远流长。档案是人类活动的真实记录&#xff0c;是人们认识和把握客观规律的重要依据。借助档案&#xff0c;我们能够更好地了解过去、把握现在、预见未来。档案工…

工业机器视觉缺陷检测工作小结

工业机器视觉检测工作小结 &#xff08;因为网上没有很系统的讲义和文档&#xff0c;都是零零散散的&#xff0c;因此&#xff0c;我自己尝试着总结一下、仅供参考&#xff09; 你想知道的大概率在这都可以找到、相机的了解镜头的了解光源的了解传统算法DL深度学习方法 &#…

基于微信小程序渗透-反编译小程序

文章目录 一、概述二、使用电脑版微信获取小程序源码三、使用工具解密源码四、配置nodejs环境五、使用工具解包 一、概述 微信小程序渗透时&#xff0c;因为小程序没有网页端页面&#xff0c;所以不能直接访问抓包分析&#xff0c;如果需要抓包分析&#xff0c;那么一般就是用…

Spring:用 Spring 整合 MyBatis(Spring-MyBatis)代码整理

文章目录 Spring&#xff1a;Day 05Spring - MyBatis1. 依赖&#xff1a;pom.xml2. 外部配置文件&#xff1a;db.properties3. MyBatis 核心配置文件&#xff1a;mybatis-config.xml4. 实体类5. 接口&#xff1a;xxxMapper.java6. 实现类&#xff1a;xxxMapper.xml7. Spring 通…

ATA-4014高压功率放大器驱动超声马达测试应用

ATA-4014 高压功率放大器简介 ATA-4014是一款理想的可放大交、直流信号的单通道高压功率放大器。最大输出160Vp-p&#xff08;80Vp&#xff09;电压&#xff0c;452Wp功率&#xff0c;可以驱动高压功率型负载。电压增益数控可调&#xff0c;一键保存常用设置&#xff0c;为您提…

利用 PRIMO 重构 M87 黑洞图像,普林斯顿高等研究院成功将「甜甜圈」变身「金戒指」

内容一览&#xff1a;2019 年&#xff0c;「事件视界望远镜 (Event Horizon Telescope&#xff0c;简称 EHT)」全球研究团队发布了人类历史上第一张黑洞照片&#xff0c;受限于当时的观测条件&#xff0c;这张黑洞图像只呈现出一个模糊不清的轮廓。近日&#xff0c;天体物理学期…

打家劫舍 III——力扣337

文章目录 题目描述法一&#xff1a;动态规划 题目描述 法一&#xff1a;动态规划 问题简化&#xff1a;一棵二叉树&#xff0c;树上的每个点都有对应的权值&#xff0c;每个点有两种状态&#xff08;选中和不选中&#xff09;&#xff0c;问在不能同时选中有父子关系的点的情况…

Kafka题集 - kafka术语面试题总结

文章目录 01. 什么是 Kafka&#xff1f;02. 为什么要用kafka&#xff1f;03. Kafka 消息引擎模型04. kafka 消费方式&#xff1f;05. Kafka 传输消息的编码格式&#xff1f;06. kafka 体系架构&#xff1f;07. kafka 消息和批次&#xff1f;08. kafka 主题和分区&#xff1f;09…

Weex中,关于组件的水平排列竖直排列居中对齐居左对齐居右对齐低部对齐顶部对齐布局对齐说明

容器内子组件排列方向 子组件竖直方向排列&#xff08;默认&#xff09; 子组件水平方向排列 <style> .container {flex-direction: row;direction: ltr; } </style>子组件在父组件容器中的对齐方式 我们主要使用两个属性实现子组件在父组件的对齐方式&#xff…

Qt之程序发布以及打包成exe安装包目录

Qt之程序发布以及打包成exe安装包 目录 一、简述二、设置应用程序图标三、发布程序四、打包程序 回到顶部 一、简述 Qt 项目开发完成之后&#xff0c;需要打包发布程序&#xff0c;而因为用户电脑上没有 Qt 配置环境&#xff0c;所以需要将 release 生成的 exe 文件和所依赖…

hiveSql调优

一、hiveSQL执行顺序 from … where … mapjoin … on … select&#xff08;筛选有用字段&#xff09; … group by ||… join … on … select&#xff08;筛选输出字段&#xff09; … having … distinct … order by … limit … union/union all|| 前是map阶段执行&…

五月最近一次面试,被阿里P8测开虐惨了...

都说金三银四涨薪季&#xff0c;我是着急忙慌的准备简历——5年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;5年测试经验起码能要个20K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&a…

自动化测试框架类型,你知道几种?此处介绍5种比较常见的

每一个测试人员都应该了解每种框架的优缺点&#xff0c;以帮助你的团队更好地确定最适合的测试的框架&#xff0c;以达到事半功倍。 什么是测试自动化框架? 自动化测试框架就是用于测试自动化的框架。具体来说&#xff0c;它提供了自动化测试用例编写、自动化测试用例执行、自…