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:
        # 姓名:张三,班级:高三一班,年龄:18
        print('姓名:{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 pymysql

class DBUtil():
    conn=None
    @classmethod
    def 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

    @classmethod
    def close_conn(cls):
        if cls.conn is not None:
            cls.conn.close()
            cls.conn=None

    @classmethod
    def select_all(cls,sql):
        cursor=None
        result=None
        try:
            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

    @classmethod
    def uid(cls,sql):
        cursor=None
        try:
            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"))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(python)Arrow库使时间处理变得更简单

前言 Arrow库并不是简单的二次开发,而是在datetime的基础上进行了扩展和增强。它通过提供更简洁的API、强大的时区支持、丰富的格式化和解析功能以及人性化的显示,填补了datetime在某些功能上的空白。如果你需要更高效、更人性化的日期时间处理方式,Arrow库是一个不错的选择…

MySQL的锁机制和锁算法

锁机制和InnoDB锁算法 MyISAM和InnoDB存储引擎使用的锁: MyISAM采用表级锁(table-level locking)。 InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁 表级锁和行级锁对比: 表级锁: MySQL中锁定 粒度最大 的一种锁,…

PyTorch 源码学习:GPU 内存管理之深入分析 CUDACachingAllocator

因引入 expandable_segments 机制,PyTorch 2.1.0 版本发生了较大变化。本文关注的是 PyTorch 原生的 GPU 内存管理机制,故研究的 PyTorch 版本为 2.0.0。代码地址: c10/cuda/CUDACachingAllocator.hc10/cuda/CUDACachingAllocator.cpp 更多内…

Rk3568驱动开发_驱动编写和挂载_2

1.字符驱动介绍: 字符驱动:按照字节流镜像读写操作的设备,读写数据分先后顺序,例如:点灯、按键、IIC、SPI、等等都是字符设备,这些设备的驱动叫字符驱动设备 Linux应用层如何调用驱动: 字符设…

记录一下在k3s快速创建gitlab

废话不多说,直接上配置文件 需要修改的地方(备注都有写): 1.命名空间 namespace 2. claimName 文件挂载 Deployment kind: Deployment apiVersion: apps/v1 metadata:name: gitlabnamespace: cicd # 替换为您的命名空间la…

leetcode 1656. 设计有序流 简单

有 n 个 (id, value) 对,其中 id 是 1 到 n 之间的一个整数,value 是一个字符串。不存在 id 相同的两个 (id, value) 对。 设计一个流,以 任意 顺序获取 n 个 (id, value) 对,并在多次调用时 按 id 递增的顺序 返回一些值。 实现…

应对现代生活的健康养生指南

在科技飞速发展的现代社会,人们的生活方式发生了巨大改变,随之而来的是一系列健康问题。快节奏的生活、高强度的工作以及电子产品的过度使用,让我们的身体承受着前所未有的压力。因此,掌握正确的健康养生方法迫在眉睫。 针对久坐不…

大连本地知识库的搭建--数据收集与预处理_01

1.马蜂窝爬虫 编程语言:Python爬虫框架:Selenium(用于浏览器自动化)解析库:BeautifulSoup(用于解析HTML) 2.爬虫策略 目标网站:马蜂窝(https://www.mafengwo.cn/&…

SQL笔记#复杂查询

一、视图 1、视图和表 使用试图时会执行SELECT语句并创建一张临时表。视图中保存的是SELECT语句;表中保存的是实际数据。 2、创建视图的方法 CREATE VIEW 视图名称(<视图列名1>,<视图列名2>,……) AS <SELECT语句> CREATE VIEW ProductSum (prod…

文件系统

目录 1.认识磁盘 磁盘的物理结构 CHS定位法 磁盘的逻辑结构 2.认识文件系统 inode 分区和分组 磁盘上的文件系统 3.软硬链接 软链接 软链接的操作 创建软链接 查看软链接 删除软链接 软链接的特点 软链接的使用场景 硬链接 硬链接的操作 创建硬链接 查看硬…

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 &#xff08;无需安装任何框架&#xff09; 简介一、工具类二、调用三、异步任务的操作四、效果&#xff1a; 简介 执行异步任务是一种很常见的需求&#xff0c;如批量发邮箱&#xff0c;短信等等执行耗时任务时&#xff0c;需要程序异步执行&…

一键部署DeepSeek

腾讯Cloud Studio提供DeepSeek一键部署功能&#xff0c;0行代码&#xff0c;秒级部署使用&#xff01; 重点是每月免费提供10000分钟&#xff01; 不用等待模型下载&#xff0c;创建即可使用。 内置 Ollama、DeepSeek-R1 1.5B、7B、8B、14B 及 32B 模型。 热门模板 AI模板 前…

(学习总结26)Linux工具:make/Makefile 自动化构建、Git 版本控制器 和 gdb/cgdb 调试器

Linux工具&#xff1a;make/Makefile 自动化构建、Git 版本控制器 和 gdb/cgdb 调试器 make/Makefile 自动化构建在 Linux 命令行中的命令 makeMakefile 的基本操作1. 编写与删文件基本操作2. 总是执行操作3. 执行操作时的依赖性4. 定义变量或命令操作与其它简单操作5. 多文件操…

Linux提权之docker提权(十三) 链接第八篇完整版

书接上回 实验环境一样的 第八篇 我们用ssh密钥登陆后 发现我们web1的权限 当我们拿到web1的权限时 我们无法提权(这里我用的继续十二的环境 大家也可以继续) 所以我们首先要提权(当然必须是一个完整的 tty shell 不会的 我们去看第二篇 当然我下边也给你表注明了) python3…

Docker启动ES容器打包本地镜像

文章目录 1、安装 Docker2、下载镜像3、查看已下载的镜像4、 保存和加载镜像5、.tar 文件与 Docker 镜像的关系6、如何从 .tar 文件加载 Docker 镜像7、为什么需要 .tar 文件&#xff1f;8、ES 8.x版本无法启动8.1 问题原因8.2 解决方案8.3 提交容器为新镜像 1、安装 Docker 如…

C#开发的Base64编码及解码完整源码及注意事项

在软件开发时&#xff0c;经常用Base64编码和解码功能。本文介绍一个简单易用的Base64 编码和解码工具&#xff0c;顾名思义&#xff0c;就是简单快捷地进行 Base64 代码的解码或编码操作。您的数据可以轻松地编码为 Base64 编码&#xff0c;也可以解码为可读的格式。传输数据时…

使用OpenCV实现帧间变化检测:基于轮廓的动态区域标注

在计算机视觉中&#xff0c;帧间差异检测&#xff08;frame differencing&#xff09;是一种常用的技术&#xff0c;用于检测视频流中的动态变化区域。这种方法尤其适用于监控、运动分析、目标追踪等场景。在这篇博客中&#xff0c;我们将通过分析一个基于OpenCV的简单帧间差异…

夜莺监控 - 边缘告警引擎架构详解

前言 夜莺类似 Grafana 可以接入多个数据源&#xff0c;查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好&#xff0c;如果由 n9e 进程去周期性查询数据并判定告警&#xff0c;那在网络链路抖动或拥塞的时候&#xff0c;告警就不稳定了。所…

【QT 一 | 信号和槽】

Qt5基本模块 Qt Creator 中的快捷键 • 注释&#xff1a;ctrl / • 运⾏&#xff1a;ctrl R • 编译&#xff1a;ctrl B • 字体缩放&#xff1a;ctrl 鼠标滑轮 • 查找&#xff1a;ctrl F • 整行移动&#xff1a;ctrl shift ⬆/⬇ • 帮助⽂档&#xff1a;F1 • 自动…