Python操作MySQL数据库的工具--sqlalchemy

文章目录

  • 一、pymysql和sqlalchemy的区别
  • 二、sqlalchemy的详细使用
    • 1.安装库
    • 2.核心思想
    • 3.整体思路
    • 4.sqlalchemy需要连接数据库
    • 5.使用步骤
      • 1.手动提前创建数据库
      • 2.使用代码创建数据表
      • 3.用代码操作数据表
        • 3.1 增加数据
        • 3.2 查询数据
        • 3.3 删除数据
        • 3.4 修改数据


一、pymysql和sqlalchemy的区别

pymysqlsqlalchemy都是Python用来操作数据库的工具,两者的区别如下:

  • pymysql库在学校用的较多,也称学者库;sqlalchemy基本都是在企业应用,也称企业库;
  • pymysql库使用sql语句操作数据库,所以非常繁琐,要求程序员要记忆大量sql语法;而sqlalchemy是采用操作对象的方式来操作数据库,对程序员很友好,不必记忆较多sql语句用法;

综上所述,推荐大家日后在实际开发中使用sqlalchemy库。

二、sqlalchemy的详细使用

1.安装库

安装命令:pip install sqlalchemy

2.核心思想

用操作对象的方式去操作数据库。

3.整体思路

借用sqlalchemy的基本框架
使用和丰富框架 ----- 满足日常需求

4.sqlalchemy需要连接数据库

连接数据库的方法模版如下:

数据库类型+数据库驱动://用户名:密码@电脑IP:mysql端口号/自定义数据库名?charset=utf8

示例如下:

mysql+pymysql://mysql账号:mysql密码@localhost:3306/数据库名?charset=utf8

5.使用步骤

1.手动提前创建数据库

打开Navicat工具,建立好连接之后,右键点击连接名称,在下拉列表中选择【新建数据库】。
在这里插入图片描述

进来新建数据库页面之后,数据库名字自己随便起,注意:字符集要选择utf8mb4,排序规则要选择utf8mb4_general_ci,千万不能有错,完了点击确定即可,数据库就创建好了。
在这里插入图片描述

2.使用代码创建数据表

使用代码创建数据表,建议单独建个Python文件,方便一会调用,该文件只用来创建数据表,我就取名叫create_table.py,这里先附上创建数据表全部代码如下:

from sqlalchemy import Column, Integer, String, Enum
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine

# 1、找到基本框架 -- 把自定义的类变成数据表  declarative_base--声明基类
Base = declarative_base()

# 2、连接数据库
engine = create_engine(
    'mysql+pymysql://root:66666666@localhost:3306/python1?charset=utf8'
)


# 3、自定义类 -- 创建表
class User(Base):
    # 3.1 表名
    __tablename__ = '员工表'
    # 3.2 字段信息
    id = Column(Integer, primary_key=True, autoincrement=True, doc='员工ID')
    name = Column(String(20), doc='员工名字')
    age = Column(Integer, doc='员工年龄')
    sex = Column(Enum('男', '女'), doc='员工性别')
    phone = Column(String(30), doc='员工电话')

    # 3.3 字段信息初始化
    def __init__(self, id, name, age, sex, phone):
        self.id = id
        self.name = name
        self.age = age
        self.sex = sex
        self.phone = phone


# 4、表的生成
Base.metadata.create_all(engine)

需要注意的是,代码中第三大部分创建表这里需要自己根据自己的实际需求去写,如下图:在这里插入图片描述

其余的所有部分都是创建数据表的标准模板,可以不做改动。

3.用代码操作数据表

用代码操作数据表,也就是通过代码对数据库中数据表内容进行增删改查等等操作,这里我也再新建一个Python文件,取名叫operation_table.py,先附上固定模版代码部分:

from create_table import User
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

# 1、连接数据库
engine = create_engine(
    'mysql+pymysql://root:66666666@localhost:3306/python1?charset=utf8'
)

# 2、创建一个会话对象 -- 第三者 -- 执行语句
# 2.1 绑定引擎
dbsession = sessionmaker(bind=engine)
# 2.2 实例化
session = dbsession()

# 3、数据增删改查

# 4、事务提交和关闭
session.commit()
session.close()

代码中第三部分数据的增删改查是根据自身需求实际对数据进行操作,其余所有部分均为固定模版,可以不做改动。

接下来说说第三部分,如何用代码对数据表中的数据做增删改查。

3.1 增加数据

A、增加单个数据:使用add()方法,示例如下所示

user = User(0, '张三', 18, '男', '1001')
session.add(user)

B、增加多个数据:使用add_all(列表)方法,示例如下所示

user1 = User(0, '张三', 20, '男', '1003')
user2 = User(0, '李四', 21, '女', '1004')
user3 = User(0, '王五', 22, '男', '1005')
user4 = User(0, '赵六', 23, '女', '1006')
user5 = User(0, '麻七', 24, '男', '1007')
session.add_all([user1, user2, user3, user4, user5])
3.2 查询数据

A、查询所有员工的信息,示例如下所示

query_obj = session.query(User).all()
for obj in query_obj:
    print(obj.id, obj.name, obj.age, obj.sex, obj.phone)

B、查询年龄在19-24的员工信息,示例如下所示

query_obj = session.query(User).filter(User.age.between(19, 24)).all()
for obj in query_obj:
    print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')

C、查询性别为男的员工信息,示例如下所示

query_obj = session.query(User).filter(User.sex == '男').all()
for obj in query_obj:
    print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')

D、查询性别为男的员工信息,并按年龄大小排序【升序:asc(),降序:desc()】,示例如下所示

query_obj = session.query(User).filter(User.sex == '男').order_by(User.age.asc()).all()
for obj in query_obj:
    print(obj.id, obj.name, obj.age, obj.sex, obj.phone, sep=' | ')
3.3 删除数据

A、删除员工:姓名=张三,示例如下所示

session.query(User).filter(User.name == '张三').delete()

B、删除员工:电话=1005,示例如下所示

session.query(User).filter(User.phone == 1005).delete()

C、清空员工信息表,示例如下所示

session.query(User).delete()
3.4 修改数据

A、id=18的用户姓名改成小明,示例如下所示

session.query(User).filter(User.id == 18).update({'name': '小明'})

B、id=22的用户姓名改成小红,性别改成女,电话改成0000,示例如下所示

session.query(User).filter(User.id == 22).update({'name': '小红', 'sex': '女', 'phone': '0000'})

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

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

相关文章

服务高峰期gc,导致服务不可用

随着应用程序的复杂性和负载的不断增加,对JVM进行调优,也是保障系统稳定性的一个重要方向。 需要注意,调优并非首选方案,一般来说解决性能问题还是要从应用程序本身入手(业务日志,慢请求等)&am…

Python 机器学习 基础 之 模型评估与改进 【网格搜素】的简单说明

Python 机器学习 基础 之 模型评估与改进 【网格搜素】的简单说明 目录 Python 机器学习 基础 之 模型评估与改进 【网格搜素】的简单说明 一、简单介绍 二、网格搜索 1、简单网格搜索 2、参数过拟合的风险与验证集 3、带交叉验证的网格搜索 附录 一、参考文献 一、简单…

【Web】2024 京麒CTF ezjvav题解

目录 step 0 step 1 step 2 EXP1 EXP2 step 0 进来是一个登录框 admin/admin成功登录 访问./source jwt伪造 带着伪造的jwt访问./source,拿到题目源码jar包 step 1 pom依赖有spring、fj、rome 反序列化入口在./Jsrc路由 有两层waf,一个是明…

深入了解python的关键字“break”与循环退出策略

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、break关键字的基础理解与用途 二、通过案例理解break的应用 三、总结break在编程中的实…

Linux中ftp配置

一、ftp协议 1、端口 ftp默认使用20、21端口 20端口用于建立数据连接 21端口用于建立控制连接 2、ftp数据连接模式 主动模式:服务器主动发起数据连接 被动模式:服务器被动等待数据连接 二、ftp安装 yum install -y vsftpd #---下…

django-celery-beat自动调度异步任务

Celery是一个简单、灵活且可靠的分布式系统,专门用于处理大量消息的实时任务调度。它支持使用任务队列的方式在分布的机器、进程、线程上执行任务调度。Celery不仅支持异步任务(如发送邮件、文件上传、图像处理等耗时操作),还支持…

拥有这几个3dMax插件,科研绘图让我省时又省力!

DNAChain(一键生成DNA链) 3DMAX一键生成DNA链插件DNAChain,沿着线条路径一键生成DNA链条,你可以用它创建非常有趣的图案和效果。 3dMax不仅在影视动画、建筑室内、环境艺术等领域应用广泛,同样,它在科研绘图…

C++ AI 编程助手

这两年 AI 发展迅猛,作为开发人员,我们总是追求更快、更高效的工作方式,AI 的出现可以说改变了很多人的编程方式。 AI 对我们来说就是一个可靠的编程助手,给我们提供了实时的建议和解决方案,无论是快速修复错误、提升…

解决:java.util.concurrent.RejectedExecutionException

一 发现RejectedExecutionException错误 今天查看服务器的时候发现了一些java.util.concurrent.RejectedExecutionException错误,这个是由于线程池里的线程忙不过来报出的。如下图: 像这种 RejectedExecutionException 错误,表明在Java应…

vue中封装组件实例

本篇是一篇组件封装。因为要经常使用,特此封装并且记录下来,以供参考。 封装组件:封装组件是指将一段具有特定功能的Vue代码(包括模板、脚本和样式)封装成一个可复用的组件。这个组件可以作为一个独立的单元&#xff…

Java毕业设计 基于springboot vue考勤管理系统

Java毕业设计 基于springboot vue考勤管理系统 SpringBoot 考勤管理系统 功能介绍 员工 登录 个人中心 修改密码 个人信息 员工请假管理 员工出差管理 薪资管理 员工签到管理 公告管理 管理员 登录 个人中心 修改密码 个人信息 员工管理 员工请假管理 员工出差管理 薪资管理…

AIGC002-LoRA让大模型微调更加轻盈方便!

AIGC002-LoRA让大模型微调更加轻盈方便! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 这篇论文名为 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS,作者是 Edward Hu 等人。它提出了一种名为 低秩自适应 (Low-Rank Adaptation, LoRA) 的新方…

离线安装kubernetes

我们很多时候在开发或测试环境中使用的Kubernetes集群基本都是云厂商提供或者说基于有网环境快速搭建的,但是到了客户的生产环境,往往基于安全考虑他们是不允许服务器连接外部网络的,这时我们就不得不在离线环境下完成部署工作。 1、前言 1…

DDR、LPDDR和GDDR的区别

1、概况 以DDR开头的内存适用于服务器、云计算、网络、笔记本电脑、台式机和消费类应用,支持更宽的通道宽度、更高的密度和不同的形状尺寸。 以LPDDR开头的内存适合面向移动和汽车这些对规格和功耗非常敏感的领域,提供更窄的通道宽度和多种低功耗运行状态…

Revit的特性 - 族类型和族实例、联动更新

Revit 模型的表示方式 Revit 是 Autodesk 推出的一款建筑建模软件,主要应用于建筑信息模型(Building Information Modeling,简称BIM)领域。Revit发布至今已经超过20年,他的核心理念是以族的概念来表达建筑模型。 在Re…

su模型转3d模型不够平滑怎么办?---模大狮

当将SU模型转换为3D模型时,可能会遇到模型不够平滑的情况,这会影响到最终的渲染效果和视觉体验。本文将探讨在此情况下应该如何解决,帮助读者更好地处理这一常见的问题。 一、检查SU模型细分程度 首先要检查的是原始的SU模型的细分程度。在S…

【vue-2】v-on、v-show、v-if及按键修饰符

目录 1、v-on事件 2、按键修饰符 3、显示和隐藏v-show 4、条件渲染v-if 1、v-on事件 创建button按钮有以下两种方式&#xff1a; <button v-on:click"edit">修改</button> <button click"edit">修改</button> 完整示例代码…

阿里云物联网平台python ADK 发布/订阅

基础知识学习参考&#xff1a; 1、使用消息通讯Topic 2、python link SDK 一、环境变量配置 1、python3.6&#xff1a;下载安装 2、安装paho-mqtt 1.4.0版本 pip install paho-mqtt1.4.03、安装安装Link SDK最新版本 pip install aliyun-iot-linkkit 4、下载python ADK…

自定义函数python:深入解析与实操

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;函数的命名与规范 二、函数命名&#xff1a;遵循规范&#xff0c;易于…

Linux 批量网络远程PXE

一、搭建PXE远程安装服务器 1、yum -y install tftp-server xinetd #安装tftp服务 2、修改vim /etc/xinetd.d/tftpTFTP服务的配置文件 systemctl start tftp systemctl start xinetd 3、yum -y install dhcp #---安装服务 cp /usr/share/doc/dhc…