Python - Python连接数据库

Python的标准数据库接口为:Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个实现库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。

一、安装PyMySQL

在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。

PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL

如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:

pip install PyMySQL

二、连接数据库

1、建表

数据库准备,连接数据库之前,请确保已经创建了python数据库,以及students表

建表SQL如下:

CREATE TABLE `student`  (`id` int NOT NULL AUTO_INCREMENT COMMENT '主键',`stu_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '学生名字',`stu_class` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '学生班级',`stu_age` int NULL DEFAULT NULL COMMENT '学生年龄',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '学生表' ROW_FORMAT = Dynamic;

2、创建Connection 对象:用于建立与数据库的连接

from pymysql import * 
# 导入pymysql模块 
# 创建连接对象 Connection对象 
# host:数据库主机地址 
# user:数据库账号 
# password:数据库密码 
# database : 需要连接的数据库的名称 
# port: mysql的端口号 
# charset: 通信采用编码格式 
conn = connect(host='127.0.0.1', user='root', password='mysql', database='python', port=3306, charset='utf8') 

1、Connection 连接对象拥有的方法

close():关闭连接,连接数据库跟打开文件一样,操作完成之后需要关闭,否则会占用连接

commit():提交,pymysql 默认开启事物,所以每次更新数据库都要提交 rollback()回滚,事务回滚

cursor():返回Cursor对象,用于执行sql语句并获得结果

2、获取cursor对象

cur = conn.cursor() # cursor对象用于执行sql语句 

3、cursor对象拥有的方法

close():关闭cursor对象

execute(operation [, parameters ]) 执行语句,返回受影响的行数,可以执行所有语句

fetchone():获取查询结果集的第一个行数据,返回一个元组

fetchall():执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回

3、SQL增删改查

1、插入语句

insertSql = '''insert into student(stu_name,stu_class,stu_age) values ('张三','高三一班',18)'''
cur.execute(insertSql)
conn.commit()  # 提交事务

2、查询语句

cur.execute('select * from students;') # 执行sql语句,select * from students; 
res = cur.fetchone() # 获取结果集的第一条数据 
res1 = cur.fetchall() # 获取结果及的所有数据 
print(res) # 将获取的查询结果打印 
print(res1) 

3、占位符:%s

执行sql语句参数化,参数化sql语句中使用%s占位。 execute(operation [parameters]) 执行语句,返回受影响的行数,可以执行所有语句 [parameters] 参数列表

# sql语句中使用%s占位
sql = 'select * from students where id=%s and stu_name= %s;' 	
# 执行sql语句
cur.execute(sql, [1,'张三'])
from pymysql import *'''
创建Connection 对象:用于建立与数据库的连接
导入pymysql模块 
# 创建连接对象 Connection对象 
# host:数据库主机地址 
# user:数据库账号 
# password:数据库密码 
# database : 需要连接的数据库的名称 
# port: mysql的端口号 
# charset: 通信采用编码格式
'''
conn = connect(host='localhost', port=3306, user='root', password='mysql', database='my_db', charset='utf8')try:# 创建游标对象cur = conn.cursor()# 执行sql语句# insertSql = '''insert into student(stu_name,stu_class,stu_age) values ('张三','高三一班',18);'''# cur.execute(insertSql)# conn.commit()  # 提交事务selectSql = '''select * from student where id=%s;'''cur.execute(selectSql,3)# selectSql = '''select * from student;'''# cur.execute(selectSql)# res = cur.fetchone()  # 获取结果集的第一条数据# print(res)# 获取结果及的所有数据result = cur.fetchall()for item in result:# 姓名:张三,班级:高三一班,年龄:18print('姓名:{0},班级:{1},年龄:{2}'.format(item[1], item[2], item[3]))
except Exception as msg:print(msg.args)
finally:# 关闭游标对象cur.close()# 关闭连接对象conn.close()

三、封装连接PyMySQL数据库工具

创建一个db_client.py文件

import pymysqlclass DBUtil():conn=None@classmethoddef get_conn(cls):if cls.conn is None:cls.conn=pymysql.connect(host="localhost",port=3306,user="root",password="mysql",database="my_db",charset="utf8")return cls.conn@classmethoddef close_conn(cls):if cls.conn is not None:cls.conn.close()cls.conn=None@classmethoddef select_all(cls,sql):cursor=Noneresult=Nonetry:cls.get_conn()cursor=cls.conn.cursor()cursor.execute(sql)result=cursor.fetchall()except Exception as e:print(e)finally:cursor.close()cls.close_conn()return result@classmethoddef uid(cls,sql):cursor=Nonetry:cls.get_conn()cursor=cls.conn.cursor()cursor.execute(sql)cls.conn.commit()except Exception as e:print(e)cls.conn.rollback()finally:cursor.close()cls.close_conn()
print('--------数据库工具DB--------')
# ((3, '张三', '高三一班', 18), (4, '李四', '高三二班', 16))
print(DBUtil.select_all("select * from student"))

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

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

相关文章

面试八股文--数据库基础知识总结(1)

1、数据库的定义 数据库(DataBase,DB)简单来说就是数据的集合数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。数据库系统…

关于在java项目部署过程MySQL拒绝连接的分析和解决方法

前言 在最近一次部署项目一次项目部署过程中,由于没有对MySQL数据库的部分权限和远程连接进行授权,导致了在执行项目功能API时,出现MySQL连接异常或MySQL拒绝连接的问题。 问题 以下是部分报错截图: 分析 根据日志提示&#xf…

PhotoLine绿色版 v25.00:全能型图像处理软件的深度解析

在图像处理领域,PhotoLine以其强大的功能和紧凑的体积,赢得了国内外众多用户的喜爱。本文将为大家全面解析PhotoLine绿色版 v25.00的各项功能,帮助大家更好地了解这款全能型的图像处理软件。 一、迷你体积,强大功能 PhotoLine被誉为迷你版的Photoshop,其体积虽小,但功能却…

阿里重磅模型深夜开源;DeepSeek宣布开源DeepGEMM;微软开源多模态AI Agent基础模型Magma...|网易数智日报

阿里重磅模型深夜开源:表现超越Sora、Pika,消费级显卡就能跑 2月26日,25日深夜阿里云视频生成大模型万相2.1(Wan)正式宣布开源,此次开源采用Apache2.0协议,14B和1.3B两个参数规格的全部推理代码…

002 Java操作kafka客户端

Java操作kafka客户端 文章目录 Java操作kafka客户端3.Java操作kafka客户端1.引入依赖2. Kafka服务配置3、生产者(Producer)实现1. 基础配置与发送消息2. 关键配置说明 4.消费者(Consumer)实现1. 基础配置与消费消息2. 关键配置说明…

【SRC实战】信息泄露导致越权会员功能

01 — 漏洞证明 1、VIP功能 2、SVIP功能 3、点击任意用户发起私聊,发现userId纯数字可遍历 4、返回包泄露身高范围height,星座constellation,属相zodiac,恋爱目标purpose,教育程度degree,成功越权VIP功能 …

游戏引擎学习第125天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾并为今天的内容做准备。 昨天,当我们离开时,工作队列已经完成了基本的功能。这个队列虽然简单,但它能够执行任务,并且我们已经为各种操作编写了测试。字符串也能够正常推送到队…

蓝桥杯 Java B 组之记忆化搜索(滑雪问题、斐波那契数列)

Day 5:记忆化搜索(滑雪问题、斐波那契数列) 📖 一、记忆化搜索简介 记忆化搜索(Memoization) 是一种优化递归的方法,它利用 哈希表(HashMap)或数组 存储已经计算过的结果…

反爬虫策略

反爬虫策略是网站用于防止自动化程序(爬虫)恶意抓取数据的核心手段,其设计需兼顾有效性、用户体验和合法性。 一、 基础检测与拦截 User-Agent检测:验证请求头中的User-Agent,拦截非常见或已知爬虫标识。IP频率限制&…

Java 实现快速排序算法:一条快速通道,分而治之

大家好,今天我们来聊聊快速排序(QuickSort)算法,这个经典的排序算法被广泛应用于各种需要高效排序的场景。作为一种分治法(Divide and Conquer)算法,快速排序的效率在平均情况下非常高&#xff…

深入解析 Spring 中的 BeanDefinition 和 BeanDefinitionRegistry

在 Spring 框架中,BeanDefinition 和 BeanDefinitionRegistry 是两个非常重要的概念,它们共同构成了 Spring IoC 容器的核心机制。本文将详细介绍这两个组件的作用、实现以及它们之间的关系。 一、BeanDefinition:Bean 的配置描述 1.1 什么…

《OpenCV》——光流估计

什么是光流估计? 光流估计的前提? 基本假设 亮度恒定假设:目标像素点的亮度在相邻帧之间保持不变。这是光流计算的基础假设,基于此可以建立数学方程来求解光流。时间连续或运动平滑假设:相邻帧之间的时间间隔足够小&a…

信息系统的安全防护

文章目录 引言**1. 物理安全****2. 网络安全****3. 数据安全****4. 身份认证与访问控制****5. 应用安全****6. 日志与监控****7. 人员与管理制度****8. 其他安全措施****9. 安全防护框架**引言 从技术、管理和人员三个方面综合考虑,构建多层次、多维度的安全防护体系。 信息…

如何进行OceanBase 运维工具的部署和表性能优化

本文来自OceanBase 用户的实践分享 随着OceanBase数据库应用的日益深入,数据量不断攀升,单个表中存储数百万乃至数千万条数据的情况变得愈发普遍。因此,部署专门的运维工具、实施针对性的表性能优化策略,以及加强指标监测工作&…

如何防止 Instagram 账号被盗用:安全设置与注意事项

如何防止 Instagram 账号被盗用:安全设置与注意事项 在这个数字化时代,社交媒体平台如 Instagram 已成为我们日常生活的一部分。然而,随着网络犯罪的增加,保护我们的在线账户安全变得尤为重要。以下是一些关键的安全设置和注意事…

Redis|复制 REPLICA

文章目录 是什么能干嘛怎么玩案例演示复制原理和工作流程复制的缺点 是什么 官网地址:https://redis.io/docs/management/replication/Redis 复制机制用于将数据从一个主节点(Master)复制到一个或多个从节点(Slave)&a…

对象存储之Ceph

Ceph 对象存储概述 Ceph 是一个开源分布式存储系统,旨在提供高度可扩展、高度可用、容错、性能优异的存储解决方案。它结合了块存储、文件系统存储和对象存储的功能,且在设计上具有极高的可扩展性和灵活性。 在 Ceph 中,对象存储&#xff0…

Document对象

DOM4j中,获得Document对象的方式有三种: 1.读取XML文件,获得document对象 SAXReader reader new SAXReader(); Document document reader.read(new File("input.xml")); 2.解析XML形式的文本,得到document对象…

树莓集团南京产业园再布局:深入剖析背后逻辑

在产业园区蓬勃发展的当下,树莓集团在南京的产业园再布局行动备受瞩目。这一举措并非偶然,其背后蕴含着深刻且多元的战略逻辑。 一、顺应区域产业发展趋势 南京作为长三角地区的重要城市,产业基础雄厚且多元。近年来,南京大力推动…