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.rhkb.cn/news/24546.html

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

相关文章

Windows 11【1001问】Windows 11 都有哪些版本?

随着Windows 11的普及,越来越多的用户开始关注其不同版本及其分支版本之间的差异。在此之前,我们已经通过一系列文章详细介绍了Windows 11的基本概念、硬件配置要求、系统镜像下载方法以及多种安装方式。从使用Rufus和UltraISO软碟通制作Windows 11系统安…

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型,有些能生成PPT内容; 有些能生成PPT,但下载需要付费; 目前只有Kimi生成的PPT,能选择模板、能在线编辑、能下载,关键全部免费! 一、用kimi生成PP…

【Java项目】基于Spring Boot的旅游管理系统

【Java项目】基于Spring Boot的旅游管理系统 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:旅游管理系统是一个基于Web的在线平台,主要分为前台和后台两大功能模块。前台功能模块包括(1)首…

Deepseek开源周第三天:DeepGEMM发布

Deepseek开源周第三天:DeepGEMM发布 前言 上周deepseek宣布,将在本周陆续发布五个开源项目,这些库已经在生产环境中经过了记录、部署和实战测试。 今天是deepseek开源周的第三天,deepseek发布了一个名为 DeepGEMM 的项目&#x…

ALM研发管理:全新甘特图,让项目管理更高效

在软件开发领域,甘特图一直是项目管理的重要工具。通过可视化的任务时间线,清晰地展示项目的进度和关键时间节点,帮助团队成员快速理解项目状态,协调工作进度,从而有效提升项目管理的效率。无论是需求分析、设计、开发…

mac os 使用 root 登录

打开系统偏好设置。进入“用户与群组”面板。点按锁按钮输入密码,再点最下面的登录选项。在右边面板的下方你会看见一行字:”网络账户服务器:加入 ”,点击加入,就可以打开目录实用工具了。 添加Root用户 正常情况下目…

【C++笔记】C++11智能指针的使用及其原理

【C笔记】C11智能指针的使用及其原理 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】C11智能指针的使用及其原理前言1.智能指针的使用场景分析2. RAII和智能指针的设计思路3. C标准库智能指针的使用4. 智能指针的原…

SQL命令详解之操作数据库

操作数据库 SQL是用于管理和操作关系型数据库的标准语言。数据库操作是SQL的核心功能之一,主要用于创建、修改和删除数据库对象,如数据库、表、视图和索引等。以下是SQL中常见的数据库操作命令及其功能简介: 1. 查询数据库 查询所有的数据库…

轨迹控制--odrive的位置控制---负载设置

轨迹控制 此模式使您可以平滑地使电机旋转,从一个位置加速,匀速和减速到另一位置。 使用位置控制时,控制器只是试图尽可能快地到达设定点。 使用轨迹控制模式可以使您更灵活地调整反馈增益,以消除干扰,同时保持平稳的运…

mysql.gtid_executed表、gtid_executed变量、gtid_purged变量的修改时机

1.2 mysql.gtid_executed表、gtid_executed变量、gtid_purged变量的修改时机 1.2.1 定义 mysql.gtid_executed表:GTID持久化的介质,GTID模块初始化的时候会读取这个表作为获取gtid_executed变量的基础。 gtid_executed变量:表示数据库中执行…

CONTACT 在 Ubuntu 系统中的安装与使用

CONTACT 概述 CONTACT 是研究三维摩擦接触问题的高级仿真程序,如轮轨之间、滚动轴承的接触问题。CONTACT 提供了完整且详细的解决方案,可集成到多体仿真软件中。其计算质量可与有限元分析相近,但计算时间仅为后者的千分之一。CONTACT 采用半…

C#连接sql server

连接时,出现如下提示: ERROR [IM014] [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配 原因是odbc的驱动和应用程序的架构不一致。我的odbc如下所示: 显示为64位,而c#程序显…

数据结构之各类排序算法代码及其详解

1. 排序的概念 排序是一种常见的算法概念,用于将一组数据按照特定的顺序进行排列。排序算法的目的是将一组数据按照递增或递减的顺序重新排列。常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。排序算法的选择通常取决于数据规模、数据分布…

山东大学软件学院人工智能导论实验之知识库推理

目录 实验目的: 实验代码: 实验内容: 实验结果 实验目的: 输入相应的条件,根据知识库推理得出相应的知识。 实验代码: def find_data(input_process_data_list):for epoch, data_process in enumerat…

【开源免费】基于SpringBoot+Vue.JS美食烹饪互动平台(JAVA毕业设计)

本文项目编号 T 219 ,文末自助获取源码 \color{red}{T219,文末自助获取源码} T219,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

在线VS离线TTS(语音合成芯片)有哪些优势-AIOT智能语音产品方案

离线 TTS 存在语音质量欠佳、音色选择有限、语言支持单一更新困难、占用资源多、适应性差、难以个性化定制等痛点 01更新维护困难 由于是离线模式,难以及时获取最新的语音数据和算法更新,无法得到持续改进。 02占用本地资源 需要在设备本地存储较大的…

530 Login fail. A secure connection is requiered(such as ssl)-java发送QQ邮箱(简单配置)

由于cs的csdN许多文章关于这方面的都是vip文章,而本文是免费的,希望广大网友觉得有帮助的可以多点赞和关注! QQ邮箱授权码到这里去开启 授权码是16位的字母,填入下面的mail.setting里面的pass里面 # 邮件服务器的SMTP地址 host…

SpringBoot整合Swagger

一、Swagger简介 Swagger 是一种 API 文档工具,可以通过生成 API 文档来提高开发者的工作效率,同时也可以提高 API 的可读性和可维护性。Spring Boot 可以与 Swagger 进行整合,以方便生成 API 文档。下面介绍一下如何使用 Spring Boot 整合 S…

【图形学入门笔记】线性代数的本质

【笔记未完待续】如果我的分享对你有帮助,请记得点赞关注不迷路。 视频源地址:https://www.youtube.com/watch?vfNk_zzaMoSs 作者:3Blue1Brown 此处仅做个人笔记使用。 01 - 向量究竟是什么? 线性代数中最基础、最根源的…

can数据记录仪在汽车路测中扮演着**关键角色*

can数据记录仪主要用于实时采集、存储和分析车辆运行中的多维度数据,帮助工程师优化车辆性能、验证安全性、改进驾驶体验,并支持法规合规性测试。 can数据记录仪在路测中扮演几个关键角色,如下, 动力系统监控:记录发…