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 = idself.name = nameself.age = ageself.sex = sexself.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'})

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

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

相关文章

vs code怎么补全路径,怎么快捷输入文件路径

安装插件: 链接:https://marketplace.visualstudio.com/items?itemNamejakob101.RelativePath 使用 按住 Ctrl Shift H,弹出窗口,输入文件补全,回车就可以了 排除文件 如果你的项目下文件太多,它会…

Ubuntu22.04之解决:忘记登录密码(二百三十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

有哪些永久免费的进销存管理软件?

我明白许多中小企业在寻求进销存系统时,希望能找到一款完全免费的解决方案,以减轻经济压力。这种心态非常正常,毕竟成本是任何企业都需要仔细考虑的因素。然而,我要强调的是,市场上那些声称“完全免费”的进销存系统&a…

【FixBug】超级大Json转POJO失败

今天遇到了一个问题:使用Jackson将一个超级大的JSON字符串转换POJO失败,debug看没问题,将JSON字符串粘贴到main方法中测试,提示错误信息如下: 自己猜测是因为字符串超长导致转换时先截断字符串导致JSON格式不正确&…

BFS解决最短路问题(详解)

目录 BFS简介 && 框架: 一.二叉树的最小深度 二:迷宫中里入口最近的出口: 三.最小基因变化: 四:单词接龙: ​五:为高尔夫比赛砍树: BFS简介 && 框架: 说到BFS…

linux centos tomcat启动内存泄漏

tomcat启动内存泄漏 经过与开发沟通,结果是开发写了死循环,导致内存泄漏,上一次是开发少打了一个jar包,让开发查代码就行,重新更新代码

【python】python商家会员数据分析可视化(源码+数据集+课程报告论文)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Elasticsearch之文本分析

文本分析基本概念 官网:Text analysis | Elasticsearch Guide [7.17] | Elastic 官网称为文本分析,这是对文本进行一直分析处理的方式,基本处理逻辑是为按照预先制定的分词规则,把原本的文档进行分割成多个小颗粒度的词项&#x…

每天五分钟深度学习框架pytorch:tensor张量的维度转换大全

本文重点 在深度学习中比较让人头疼的一点就是矩阵的维度,我们必须构建出符合神经网络维度的矩阵,只有将符合要求的矩阵放到神经网络中才可以运行神经网络,本节课程我们将学习以下tensor中维度的变化。 view和shape View和shape,这两个方法可以完成维度的变换操作,而且使…

如何在anaconda的环境下安装langchain

1、安装anaconda; 2、在终端上,输入: conda install langchain -c conda-forge Proceed ([y]/n)? y 输入:Y 3、安装完成后,输入: python -c "import langchain; print(langchain.__version__)&…

OpenBayes 一周速览|TripoSR 开源:1 秒即 2D 变 3D、经典 GTZAN 音乐数据集上线

公共资源速递 This Weekly Snapshots !5 个数据集: FER2013 面部表情识别数据集 GTZAN 音乐流派分类数据集 MVTec-AD 工业异常检测数据集 UCAS-AOD 遥感目标检测数据集 Oxford 102 Flowers 花卉图片数据集 3 个教程: Latte 全球首个开…

linux 查看csv文件,按指定列聚合 排序

在Linux中,你可以使用awk工具来查看CSV文件的内容,并按照指定的列进行聚合。awk是一种强大的文本处理工具,它可以处理文本文件中的数据,并根据条件执行相应的操作。 以下是一个示例,假设你有一个名为data.csv的CSV文件…

spring boot3整合邮件服务实现邮件发送功能

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 内容概要 开通服务 依赖引入 配置属性 创建邮件发送工具类 测试 最近发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家…

linux 中 fd 申请和释放管理(两级 bitmap)

linux 中 fd 的几点理解_linux fd-CSDN博客 通过上边的文章,我们可以知道,在 linux 中,fd 有以下几点需要了解: (1)fd 表示进程打开的文件,是进程级别的资源,不是系统级别的资源 …

【机器学习300问】101、1x1卷积有什么作用?

卷积神经网络最重要的操作就是卷积层的卷积操作,之前文章中介绍过,卷积核filter往往都是3x3或者5x5什么的,但有一种非常特殊的卷积——1x1卷积。他在CNN中扮演着非常重要的角色。 一、通道维度的降维/升维 这是1x1卷积最显著的作用之一。通过…

【Redis】持久化操作详解

Redis 持久化操作详解 Redis 实现持久化的时候,具体是按照什么样的策略来实现的呢? Redis支持两种方式的持久化,一种是RDB方式、另一种是AOF(append-only-file)方式,两种持久化方式可以单独使用其中一种&…

网络原理-HTTP协议

HTTP协议 HTTP协议全称为超文本传输协议,除了能传输字符串,还能传输图片、视频、音频等。 当我们在访问网页的时候,浏览器会从服务器上下载数据,这些数据都会放在HTTP响应中,然后浏览器再根据这个HTTP响应显示出网页信息。 抓包 抓包工具本质上是一个代理工具,即我们将构造…

神秘山洞惊现AI绘画至宝Stable Diffusion残卷

最近听到不少大宗门纷纷发声:随着AI神器的现世“程序员职业将不复存在”,“设计师将要失业”。 至此,不少修士开始担忧起来,现出世的AI神器会不会取代掉我辈修士。 其实,至女娲天神创造人类以来,在这漫漫…

视频监控平台AS-V1000产品介绍:账户或用户数据的导入和导出功能介绍

目录 一、功能描述 (一)导入功能定义 (二)导出功能定义 二、用户数据的导入导出的作用 三、AS-V1000新版本的导出和导入功能介绍 (一)功能主界面 (二)导出功能 1、导出操作 …

基于Netty实现安全认证的WebSocket(wss)服务端

1.Netty服务端 服务端代码参考【基于Netty实现WebSocket服务端-CSDN博客】中的两种方式都可以;这里用的是第一种简单方式。 新增如下逻辑:添加SSLHandler SSLContext sslContext SslUtil.createSSLContext("JKS","D:\\workSpace\\day…