python连接mysql之PyMySQL的基本使用

news2024/12/23 5:05:35

一、PyMySQL的基本使用

使用pymysql 直接连接mysql

PyMySQL安装

pip3 install pymysql
 import pymysql
 
# 连接数据库,创建连接对象connection
# 连接对象作用是:连接数据库、发送数据库信息、处理回滚操作(查询中断时,数据库回到最初状态)、创建新的光标对象
 
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt' , # 数据库名
                       charset=“utf8”
                       )
 
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 执行完毕返回的结果集默认以元组显示
 
sql = """ """
 
# 执行SQL语句
cursor.execute(sql)
 
# 关闭光标对象
cursor.close()
 
# 关闭数据库连接
conn.close()

二、增删改查操作

2.2 添加多条数据

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2022 - 06 -18
# @File: test2.py
import pymysql
 
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt'  # 数据库名
                       )
# 获取一个光标
cursor = conn.cursor()
 
# 定义要执行的sql语句
sql = 'insert into student(name,age) values(%s,%s);'
data = [
    ('july', 14),
    ('june', 25),
    ('marin', 36)
]
# 拼接并执行sql语句
cursor.executemany(sql, data)
 
# 涉及写操作要注意提交
conn.commit()
 
# 关闭连接
cursor.close()
conn.close()

2.3 插入单条数据

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2022 - 06 -18
# @File: test3.py
import pymysql
 
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt'  # 数据库名
                       )
 
cursor = conn.cursor()  # 获取一个光标
sql = 'insert into student (name,age) values (%s,%s);'
 
name = 'wuli'
age = 10
cursor.execute(sql, [name, age])
conn.commit()
cursor.close()
conn.close()

2.4 获取最新插入数据 (最后一条)

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2022 - 06 -18
# @File: test4.py
import pymysql
 
# 建立连接
 
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt'  # 数据库名
                       )
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = 'insert into student (name,age) values (%s,%s);'
 
name = 'wuli'
age = 10
cursor.execute(sql, [name, age])
conn.commit()
 
# 关闭连接
 
# 获取最新的那一条数据的ID
last_id = cursor.lastrowid
print("最后一条数据的ID是:", last_id)
 
cursor.close()
conn.close()

2.5 删除操作

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2022 - 06 -18
# @File: test5.py
import pymysql
 
# 建立连接
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt'  # 数据库名
                       )
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = "delete from student where name=%s;"
name = "wuli"
# 拼接并执行SQL语句
cursor.execute(sql, [name])
# 涉及写操作注意要提交
conn.commit()
# 关闭连接
 
cursor.close()
conn.close()

2.5 更改数据

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2022 - 06 -18
# @File: test6.py
import pymysql
 
# 建立连接
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt'  # 数据库名
                       )
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = "update student set age=%s where name=%s;"
# 拼接并执行SQL语句
cursor.execute(sql, [28,"ni"])
 
# 涉及写操作注意要提交
conn.commit()
 
# 关闭连接
cursor.close()
conn.close()

三、查询数据

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2022 - 06 -18
# @File: test7.py
import pymysql
 
# 建立连接
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt',  # 数据库名
                       charset='utf8'
                       )
 
# 获取一个光标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 返回字典数据类型
 
# 定义将要执行的sql语句
sql = 'select name,age from student'
# 拼接并执行sql语句
cursor.execute(sql)
 
# 取到查询结果
ret1 = cursor.fetchone()  # 取一条
ret2 = cursor.fetchmany(3)  # 取三条
ret3 = cursor.fetchone()  # 取一条
 
 
cursor.close()
conn.close()
 
print(ret1)
print(ret2)
print(ret3)

打印结果:

{'name': 'ni', 'age': 28}
[{'name': 'wo', 'age': 13}, {'name': 'july', 'age': 14}, {'name': 'june', 'age': 25}]
{'name': 'marin', 'age': 36}

注意:

ret1 = cursor.fetchone() # 取一条

ret2 = cursor.fetchmany(3) # 取三条

ret3 = cursor.fetchone() # 取一条

这里的取一条,不是第一条,是依次往下取数据的,ret1 ,是第1条数据,ret2 ,是 2、3、4 数据。

ret3 是第5条数据。

四、数据回滚

# -*- coding:utf-8 -*-
# @Author: 喵酱
# @time: 2022 - 06 -18
# @File: test8.py
import pymysql
 
# 建立连接
 
conn = pymysql.connect(host='127.0.0.1',  # host属性
                       port=3308,  # 端口号
                       user='root',  # 用户名
                       password='123456',  # 此处填登录数据库的密码
                       db='bt',  # 数据库名
                       charset='utf8'
                       )
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql1 = "insert into student (name, age) values (%s, %s);"
sql2 = "insert into hobby (id, hobby) values (%s,%s);"
name = "july1"
age = 14
id = "我是错误的id"  # id = "3"
hobby = "打游戏"
try:
    # 拼接并执行SQL语句
    cursor.execute(sql1, [name, age])
    print(sql1)
    cursor.execute(sql2, [id, hobby])  # 报错的SQL语句
    # 涉及写操作注意要提交
    conn.commit()
except Exception as e:
    print(str(e))
    # 有异常就回滚
    conn.rollback()
 
# 关闭连接
cursor.close()
conn.close()

发生异常后,2条数据,都没有写入库里。

六、python通过连接池连接数据库

6.1初始化 __init__

def __init__(self, **kwargs):
        self.size = kwargs.get('size', 10)
        self.kwargs = kwargs
        self.conn_queue = queue.Queue(maxsize=self.size)
        for i in range(self.size):
            self.conn_queue.put(self._create_new_conn())
  • size:连接池支持的连接数,这里定义为10

  • conn_queue:定义了一个队列,队列存放的是数据库的连接

  • for循环:建立好十个与数据库的连接,把这些连接放到队列中

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

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

相关文章

关于Docker如何安装nginx

目录 1.Nginx 1.2. 安装nginx 2.容器之间相互通信 2.1.两个容器在同一网段 2.2.两个容器在不同网段 1.Nginx Nginx也是一款服务器,我们常用它做如:反向代理、负载均衡、动态与静态资源的分离的工作 反向代理:反向代理(Revers…

java spring下载步骤

首先 我们要下载一下 spring 我们访问spring的官网 地址非常的好记 spring.io project进入官网我们选择 project>Spring Framework 进入界面 我们选择 Learn 下面就会给我们列举出版本 这边建议大家下5.3.24 首先 要下GA的 因为这表示它比较稳定 其次 版本比较适中 大部分…

黑客动态播报 | 2023年网络攻击趋势

今天是跨入2023年大门的第一个工作日,作为开年的第一篇内容,我们从安全说起。      自2020年勒索软件攻击呈爆发式增长以来,全球企业都经历了“噩梦”般的三年,层出不穷的手段和无孔不入的方式,都让我们绷紧了每一条神经。      而在这三年里,我们并不是疲于应对,通过不…

过年了,怎么样批量爬取某东商品信息,并做可视化

前言 马上就要过年了,大家都在屯年货了网络上商品信息太多,不知道如何选择,今天,我们就用python爬取商品信息,并做可视化。 环境使用 python 3.9pycharm 模块使用 requestsseleniumtime谷歌驱动 说明 一、谷歌驱动…

前端学习之BootStrap

前言 Bootstrap 最初是由 mdo 和 fat 于 2010 年中旬创造就职于 Twitter 时创造的。在成为开源框架之前,Bootstrap 被称为 Twitter Blueprint。经过几个月的开发,Twitter 举办了首届黑客周(Hack Week),该项目获得了爆…

基于Java+SpringBoot+vue+elementUI私人健身教练预约管理系统设计实现

基于JavaSpringBootvueelementUI私人健身教练预约管理系统设计实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留…

Linux中的文件描述符

目录 文件描述符 系统调用 open 为什么fd从3开始呢? 为什么是0,1,2,3...呢? 文件描述符分配规则 系统调用 close 系统调用 wirte 系统调用 read 文件描述符 在了解文件描述符之前,先了解关于操作文件的系统调用,C语言中的f…

Spring Cloud整体架构

Spring Cloud的中文名我们就暂且称呼它为“春云”吧,听上去是多么朴实无华的名字,不过呢一般名字起的低调的都是厉害角色,我们就看看Spring Cloud都提供了哪些靠谱功能吧。 技多不压身 我们前面说过,Spring Cloud是一款微服务架…

Aspect-based Sentiment Analysis with Opinion Tree Generation 论文阅读笔记

一、作者 Xiaoyi Bao、Wang Zhongqing、 Xiaotong Jiang、 Rong Xiao、Shoushan Li Natural Language Processing Lab, Soochow University, Suzhou, China Alibaba Group, Hangzhou, China 二、背景 作为细粒度的情感分析任务,ABSA 涉及了多个基本情感元素&am…

(八)汇编语言——数据处理的两个基本问题

目录 用于内存寻址的寄存器 bp 组合 两个基本问题 数据位置 立即数 寄存器 内存 数据长度 除法指令 dup指令 总结 接下来,我们要处理的是有关数据处理的两个基本问题,那么这两个基本问题是什么呢?我们先告诉大家这两个问题&#…

《操作系统-真象还原》15. 系统交互

文章目录fork 的原理与实现简介什么是 forkfork 的实现思路代码get_a_page_without_opvaddrbitmapcopy_pcb_vaddrbitmap_stack0copy_body_stack3build_child_stackupdate_inode_open_cntscopy_processsys_fork添加 fork 系统调用与实现 init 进程添加 fork 系统调用实现 init 进…

计算机网络复习之DL层(数据链路层)与LAN(Local Area Network局域网)

文章目录封装成帧透明传输字符计数法字符填充法零比特填充法违规编码法差错控制透明网桥网桥自学习转发表网桥的自学习和转发帧的步骤透明网桥工作原理交换机/路由器的广播域、冲突域冲突域广播域交换机/路由器的两域区别CSMA/CD协议PPP协议HDLC协议PPP和HDLC的对比简述IEEE802…

2. 数据类型、向量、向量索引、向量修改、向量运算

课程视频链接:https://www.bilibili.com/video/BV19x411X7C6?p1 本笔记参照该视频,笔记顺序做了些调整【个人感觉逻辑顺畅】,并删掉一些不重要的内容 系列笔记目录【持续更新】:https://blog.csdn.net/weixin_42214698/category_…

【学习】Q learning、Q-learning for continuous actions、关于深度学习的猜想

文章目录一、Q learning评估状态值函数Vπ(s)MCTDdouble DQNdueling DQNprioritized replymulti-stepnoisy netdistributionalrainbow二、Q-learning for continuous actions三、关于深度学习的猜想一、Q learning value-based的方法,评论家不会直接决定行动。给定…

低度酒“百家争鸣”,谁能俘获年轻人的芳心?

【潮汐商业评论/原创】随着消费升级和女性消费力量的崛起,“她经济”逐渐成为新零售消费环境下一道“靓丽风景线”。女性消费者的消费偏好和消费习惯,正在促使低度酒、食品、服装、护肤、美妆、家居、育儿等行业发生新的变革。特别是酒水市场&#xff0c…

Spring Boot学习篇(八)

Spring Boot学习篇(八) 1.thymeleaf模板引擎使用篇(二) 1.1 配置通过地址栏直接访问html页面 1.1.1 在zlz包下创建filter包,其目录结构如下所示 1.1.2 在filter包下创建HTMLFilter类,其内容如下所示 package com.zlz.filter;import javax.servlet.*; import javax.servlet.…

启用分页机制

前言 本博客记录《操作系统真象还原》第五章第2个实验的操作~ 实验环境:ubuntu18.04VMware , Bochs下载安装 实验内容:启动内存分页机制 实验原理:内存分页机制 前置知识 前置知识可食用内存分页机制 代码 include/boot.in…

UML类图入门实战

介绍 UML——Unified modeling language UML (统一建模语言),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果。 UML 本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于描述…

设计模式学习(二):Adapter适配器模式

一、什么是Adapter模式我们先举个例子:如果想让额定工作电压是直流12V的笔记本电脑在交流220V的电源下工作,应该怎么做呢?通常,我们会使用适配器,将家庭用的交流220V电压转换成我们所需要的直流12V电压。这就是适配器的工作&…

Hive数据仓库简介与安装

文章目录Hive数据仓库简介及安装配置一、数据仓库简介1. 什么是数据仓库2. 数据仓库的结构1)数据源2)数据存储与管理3)OLAP服务器4)前端工具3. 数据仓库的数据模型1)星状模型2)雪花模型二、Hive简介1. 什么…