Python + SQLAlchemy操作MySQL数据库(ORM)

一、sqlalchemy简介

SQLAlchemy是用Python编程语言开发的一个开源项目。它提供了SQL工具包和ORM(对象关系映射)工具,使用MIT许可证发行。

SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。它的理念是SQL数据库的量级和性能比对象集合重要,而对象集合的抽象又重要于表和行。

二、sqlalchemy的使用
1、安装
pip install pymysql
pip  install  sqlalchemy
2、CRUD(Create Read Update Delete,增查改删)
from sqlalchemy  import create_engine  #导入数据库引擎
from sqlalchemy.ext.declarative import declarative_base #导入orm基础类
from sqlalchemy import Column,Integer,String,DateTime #导入orm的列、数据类型
from sqlalchemy.orm import sessionmaker #导入session(会话)生成器

#1.创建一个orm的基础类
Base = declarative_base()

#2.创建数据库连接的引擎(数据库+数据库操作包://用户名:密码@数据库服务器地址:端口号/数据库名)
engine = create_engine('mysql+pymysql://root:#####@localhost:3306/dbms')

#3.将数据库连接引擎绑定到Base对象上
Base.metadata.create_all(engine)

#4.创建Session,绑定数据库引擎
Session = sessionmaker(bind=engine)

#5.创建Session对象(会话对象)
session = Session()

#6.声明ORM映射类,必须继承Base
class Employee(Base):
    __tablename__ = "employee"
    id = Column(Integer,primary_key=True)
    name = Column(String(30))
    gender = Column(String(4))
    birthday = Column(DateTime)
    phone = Column(String(11))
    address = Column(String(50))

    def __init__(self,name,gender,birthday,phone,address):
        self.name = name
        self.gender = gender
        self.birthday = birthday
        self.phone = phone
        self.address = address

#7.定义单表的CRUD函数
#7.1 增加员工信息
def insertEmployee(emp):
    try:
        session.add(emp)
        session.commit()
    except Exception as err:
        print("增加操作失败,%s" % err)
        session.rollback()
        return False
    else:
        return True
    finally:
        session.close()

#7.2 删除员工信息
def deleteEmployee(emp_id):
    try:
        emp_to_delete = session.query(Employee).filter_by(id=emp_id).first()
        if emp_to_delete:
            session.delete(emp_to_delete)
            session.commit()
    except Exception as err:
        print("删除操作失败,%s" % err)
        session.rollback()
        return False
    else:
        return True
    finally:
        session.close()

#7.3 修改员工信息
def updateEmployee(emp):
    try:
        emp_update = session.query(Employee).filter_by(id=emp.id).first()
        if emp_update:
            emp_update.name = emp.name
            emp_update.gender = emp.gender
            emp_update.birthday = emp.birthday
            emp_update.phone = emp.phone
            emp_update.address = emp.address
            session.commit()
    except Exception as err:
        print("修改操作失败,%s" % err)
        session.rollback()
        return False
    else:
        return True
    finally:
        session.close()

#7.4 查询所有
def findAllEmployee():
    try:
        res = session.query(Employee).all()
    except Exception as err:
        print("查询失败,%s" % err)
    else:
        return res
    finally:
        session.close()
3、使用unittest进行测试
from  src.com import MysqlUtils
import unittest


class TestORM(unittest.TestCase):

    def test_insert(self):
        emp = MysqlUtils.Employee('AA','男','2001-10-15','13578956589','宁夏银川')
        if(MysqlUtils.insertEmployee(emp)):
            print("增加成功")
        print("---------------------------------------")

    def test_delete(self):
        if(MysqlUtils.deleteEmployee(26)):
            print("删除成功")

    def test_update(self):
        emp = MysqlUtils.Employee('刘备','男','2024-11-11','18991758746','湖北宜昌');
        emp.id = 17
        if(MysqlUtils.updateEmployee(emp)):
            print("修改成功")

    def test_findAll(self):
        res = MysqlUtils.findAllEmployee()
        for i in res:
            print(i.id, i.name)

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

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

相关文章

货拉拉0-1数据指标体系构建与应用

目录 一、背景 二、指标体系搭建 2.1 指标设计 2.2 指标体系搭建 2.3 指标维度拆解 三、指标标准化建设 四、指标元数据管理 五、指标应用&未来规划 原文大佬介绍的这篇指标体系构建有借鉴意义,现摘抄下来用作沉淀学习。如有侵权请告知~ 一、背景 指标…

什么是仪器校准报告?

在科学实验和工业生产中,仪器是一种非常重要的辅助工具,无论是测量数据、控制实验进程还是保证产品质量,仪器都发挥着至关重要的作用。为了确保仪器的准确性和稳定性,仪器校准报告这一概念应运而生。本文给大家详细介绍仪器校准报…

利用STM32的定时器和中断实现精准时间控制

⬇帮大家整理了单片机的资料 包括stm32的项目合集【源码开发文档】 点击下方蓝字即可领取,感谢支持!⬇ 点击领取更多嵌入式详细资料 问题讨论,stm32的资料领取可以私信! 在嵌入式系统开发中,精确的时间控制是许多应用的…

0元实现网站HTTP升级到HTTPS(免费https证书)

HTTPS就是在HTTP的基础上加入了SSL,将一个使用HTTP的网站免费升级到HTTPS主要包括以下几个步骤: 1 获取SSL证书 永久免费的https证书申请通道https://www.joyssl.com/certificate/select/free.html?nid16 免费的SSL证书同样能实现HTTPS,国…

【前端】vue的基础知识及开发指引

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Vue是什么二、学习 Vue.js 的基础知识三、熟悉 Vue.js 的生态系统四、掌握常用工具和库五、实践和项目开发六、 持续学习和跟进 前言 随着开发语言及人工智…

[Windows] Bypass分流抢票 v1.16.25 五一黄金周自动抢票软件(2024.02.08更新)

五一黄金周要来了,火车票难买到,即便官网候选订票也要看运气,推荐使用这个靠谱的自动抢票软件, 该工具是目前市面上最好用口碑最好的电脑抢票软件,从13年到现在,作者依旧在更新,可以自动识别123…

优秀博士学位论文分享:通往稳健在线学习的“在线集成”理论与方法

优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平,本公众号近期将推出“优秀博士学位论文分享”系列文章,对人工智能领域2023年优秀博士学位论文进行介绍和分享,方便广大读者了解人工智能领域最前沿的研究进展。 “CCF博士学位…

用于自动化机器陀螺仪传感器:XV7081BB

介绍一款用于自动化机器的数字输出型陀螺仪传感器XV7081BB。这款新推出的陀螺仪XV7081BB到底有什么魅力呢?我们可以用常用款用于智能割草机的XV7011BB作对比:XV7081BB提供16位或24位分辨率的角速率输出速率范围为400s。而XV7011BB采用16位角速度输出,检测范围为100…

软考 系统架构设计师系列知识点之大数据设计理论与实践(13)

接前一篇文章:软考 系统架构设计师系列知识点之大数据设计理论与实践(12) 所属章节: 第19章. 大数据架构设计理论与实践 第4节 Kappa架构 19.4.2 Kappa架构介绍 Kappa架构由Jay Kreps提出(Lambda由Storm之父Nayhan M…

48-PCIE转串口和并口电路设计

视频链接 PCIE转串口和并口电路设计01_哔哩哔哩_bilibili PCIe转串口和并口电路设计 1、PCIe转串并口电路设计基本介绍 2、PCIe转串口和并口的方案(京东) 2.1、PCIe转串口 2.1.1、ASIX (亚信)MCS9922-PCIe转2路RS232扩展卡 2.1.2、ASIX (亚信)MCS9900-PCIe转4路RS232扩展卡…

yield函数怎么理解?

目录 白话系列: 例子🌰: 什么叫暂停 yield和next搭配使用 例子🌰: 白话系列: 可以暂停,可以生成,next一个,yield一个 例子🌰: def generat…

如何使用 Meta AI 根据文本提示生成图片

在数字艺术和设计的世界中,AI 图片生成器已经成为了一种创新工具,它能够根据简短的文本描述来创造出令人惊叹的视觉作品。Meta AI 提供了这样一个平台,让用户可以轻松地将他们的想象变为现实。在本文中,我将指导您如何使用 Meta A…

C++——类和对象练习(日期类)

日期类 1. 构造函数和析构函数2. 拷贝构造和赋值运算符重载3. 运算符重载3.1 日期的比较3.2 日期加减天数3.3 日期减日期3.4 流插入和流提取 4. 取地址和const取地址重载5. 完整代码Date.hDate.c 对日期类进行一个完善,可以帮助我们理解六个默认成员函数&#xff0c…

图搜索算法详解:广度优先搜索与深度优先搜索的探索之旅

图搜索算法详解:广度优先搜索与深度优先搜索的探索之旅 1. 广度优先搜索(BFS)1.1 伪代码1.2 C语言实现 2. 深度优先搜索(DFS)2.1 伪代码2.2 C语言实现 3. 总结 图搜索算法是计算机科学中用于在图结构中查找路径的算法。…

手撕红黑树(map和set底层结构)(2)

[TOC]红黑树 一 红黑树概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍&…

54-摄像头DVP接口电路设计

视频链接 摄像头电路设计-DVP接口01_哔哩哔哩_bilibili 摄像头DVP接口电路设计 1、摄像头简介 1.1、Camera介绍 在各类信息中,图像含有最丰富的信息,作为机器视觉领域的核心部件,摄像头被广泛应用。 目前市面上最常用的摄像头为OV5640。…

【面试必备】Python 快问快答

什么是 Python,它有哪些主要特点 答:Python 是一种高级解释型编程语言,以简单易读著称。其主要特点包括动态类型、自动内存管理(垃圾回收)、丰富的标准库以及对多种编程范式(过程式、面向对象、函数式&…

内容营销ROI提升秘籍:Kompas.ai的高效内容分析

在内容营销的领域中,投资回报率(ROI)是衡量营销活动成效的关键指标。一个高ROI的内容营销策略不仅能够为企业带来直接的经济收益,还能够提升品牌价值和市场影响力。本文将深入探讨内容营销中ROI的重要性,介绍Kompas.ai…

【嵌入式】Arduino IDE + ESP32开发环境配置

一 背景说明 最近想捣鼓一下ESP32的集成芯片,比较了一下,选择Arduino IDE并添加ESP32支持库的方式来开发,下面记录一下安装过程以及安装过程中遇到的坑。 二 下载准备 【1】Arduino IDE ESP32支持一键安装包(非常推荐&#xff0…

canvas 学习

最近的项目涉及到 canvas 相关的知识,就在网站上找资源先大概了解一下,然后再细细研究。 看到了一篇 “canvas详细教程” 的资源,感觉十分不错,就分享给大家: canvas详细教程! ( 近1万字吐血总结)这期是潘潘整理的万…
最新文章