当前位置: 首页 > news >正文

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'})

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 日用百货元宇宙 以科技创新培育产业新质生产力
  • tensorflow如何指定gpu运行还是cpu运行
  • Kotlin中 take、drop方法使用
  • 生命在于学习——Python人工智能原理(1.2)
  • go map
  • 【小技巧】KEIL C51 报错`Warning L6: XDATA Space Memory Overlap`
  • [前端] axios 请求成功了,为什么通过浏览器看不到返回数据
  • 极致优化之道-JVM字节码调优全揭秘
  • 2024电工杯数学建模B题完整论文讲解(含每一问python代码+数据)
  • 2、OpenVPN搭建
  • 学 Python 具体能干什么?
  • ZeroTier+Nomachine远程
  • 【Python】 使用SMOTE解决数据不平衡问题
  • 【加密与解密(第四版)】第十八章笔记
  • 【计算机网络】第三章——停止-等待协议
  • 30天自制操作系统-2
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • java8-模拟hadoop
  • js学习笔记
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • ng6--错误信息小结(持续更新)
  • STAR法则
  • 彻底搞懂浏览器Event-loop
  • 后端_MYSQL
  • 力扣(LeetCode)21
  • 七牛云假注销小指南
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 入手阿里云新服务器的部署NODE
  • puppet连载22:define用法
  • #git 撤消对文件的更改
  • #include到底该写在哪
  • #Java第九次作业--输入输出流和文件操作
  • #QT(智能家居界面-界面切换)
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $forceUpdate()函数
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Java入门)抽象类,接口,内部类
  • (js)循环条件满足时终止循环
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二十四)Flask之flask-session组件
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm高校实验室 毕业设计 800008
  • (汇总)os模块以及shutil模块对文件的操作
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)Sublime Text3配置Lua运行环境
  • (转)项目管理杂谈-我所期望的新人
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (轉)JSON.stringify 语法实例讲解
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]