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

devtools/2024/9/19 21:15:02/ 标签: 数据库, mysql, python
一、sqlalchemy简介

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

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

二、sqlalchemy的使用
1、安装
python">pip install pymysql
pip  install  sqlalchemy
2、CRUD(Create Read Update Delete,增查改删)
python">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 = nameself.gender = genderself.birthday = birthdayself.phone = phoneself.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 Falseelse:return Truefinally: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 Falseelse:return Truefinally: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.nameemp_update.gender = emp.genderemp_update.birthday = emp.birthdayemp_update.phone = emp.phoneemp_update.address = emp.addresssession.commit()except Exception as err:print("修改操作失败,%s" % err)session.rollback()return Falseelse:return Truefinally:session.close()#7.4 查询所有
def findAllEmployee():try:res = session.query(Employee).all()except Exception as err:print("查询失败,%s" % err)else:return resfinally:session.close()
3、使用unittest进行测试
python">from  src.com import MysqlUtils
import unittestclass 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 = 17if(MysqlUtils.updateEmployee(emp)):print("修改成功")def test_findAll(self):res = MysqlUtils.findAllEmployee()for i in res:print(i.id, i.name)


http://www.ppmy.cn/devtools/17937.html

相关文章

Python-100-Days: Day01

Day01 Python简介 1.1989年Guido von Rossum在圣诞节之夜开始着手python语言编译器的编写。 2.1991年2月 Python v1 编译器诞生,使用C实现的,此时可以调用C的库函数。 3.1994年1月,Python v1.0 正式版发布。 4.2000年10月16日&#xff0…

B008-方法参数传递可变参数工具类

目录 方法参数传递可变参数冒泡排序Arrays工具类Arrays工具类常用方法 方法参数传递 /*** java中只有值传递* 基本数据类型 传递的是具体的值* 引用数据类型 传递的是地址值*/ public class _01_ParamPass {public static void main(String[] args) {// 调用方法 getSumge…

关于MCU核心板的一些常见问题

BGA植球与焊接(多涂焊油): 【BGA芯片是真麻烦,主要是植锡珠太麻烦了,拆一次就得重新植】https://www.bilibili.com/video/BV1vW4y1w7oNvd_source3cc3c07b09206097d0d8b0aefdf07958 / NC电容一般有两种含义&#xff1…

【转载】C#集成JWT快速入门

一、JWT基本概念 JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于在双方之间安全地传输信息作为JSON对象。这些信息可以被验证、信任,因为它们是数字签名…

JVM(Jvm如何管理空间?对象如何存储、管理?)

Jvm如何管理空间(Java运行时数据区域与分配空间的方式) ⭐运行时数据区域 程序计数器 程序计数器(PC),是一块较小的内存空。它可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机的多线程是通过时间片轮转调…

应用回归分析,R语音,逐步回归法,第5章

library(readr) data3_1 <- read_csv("data3.1.csv")View(data3_1) lm5<-lm(y~.,data=data3_1) lm6<-step(lm5,direction = "both") summary(lm6) 输出: Start: AIC=377.73 y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9Df Sum of Sq …

DIY高考倒计时小软件python实现

目录 一.前言 二.完整代码 三.代码分析 一.前言 高考倒计时是指从当前日期到高考日期之间的天数倒计时。高考是指中国的普通高等学校招生全国统一考试,是中国教育系统中最为重要和决定性的考试之一。在高考前,学生和家长通常会关注离高考还有多少天,以便合理安排备考时间…

【nvm最新解决方案】Node.js v16.20.2 is not yet released or available

【nvm最新解决方案】Node.js v16.20.2 is not yet released or available 解决办法&#xff1a;下载想安装的node压缩包&#xff0c;放入nvm对应目录。 2024年最新node压缩包地址&#xff1a;https://nodejs.org/dist/ 1、选择对应的node版本&#xff1a;例如&#xff0c;我选的…

STM32应用开发教程进阶--UART串口重定向(printf)

实现目标 1、掌握STM32 HAL库的串口重定向 2、具体目标&#xff1a;1、实现printf “打印”各种常用的类型的数据变量 一、串口“打印” UART串口通信协议是我们常用的通信协议&#xff08;UART、I2C、SPI等&#xff09;之一&#xff0c;全称叫做通用异步收发传输器&#xf…

【Web】HNCTF 2022 题解(全)

目录 Week1 Interesting_include 2048 easy_html What is Web Interesting_http easy_upload Week2 ez_SSTI easy_include ez_ssrf Canyource easy_unser easy_sql ohmywordpress Week3 ssssti Fun_php ez_phar QAQ_1inclu4e logjjjjlogjjjj …

学python的第十九天

网络通信和访问数据库 1.1 基本的网络知识 TCP/IP IP是低级的路由协议&#xff0c;它将数据拆分在许多小的数据包中&#xff0c;并通过网络将他们发送到某一特定地址&#xff0c;但无法保证所有包都抵达目的地&#xff0c;也不能保证包按顺序抵达 TCP&#xff08;传输控制协议…

如何制作个性又美观的二维码?自定义Logo、样式,还能一键复用

草料二维码提供基础的二维码美化设置&#xff0c;包含Logo、颜色、码点码眼、容错、添加文字等设置。 还提供150标签样式&#xff0c;标签样式中所有内容&#xff0c;包括LOGO、背景、字段数量等&#xff0c;均可修改。 同时&#xff0c;支持将样式保存到账号下&#xff0c;方…

295. 数据流的中位数

295. 数据流的中位数 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。例如 arr [2,3,4] 的中位数是 3 。 例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类:MedianFinder() 初始…

博睿数据亮相GOPS全球运维大会,Bonree ONE 2024春季正式版发布!

2024年4月25日&#xff0c;博睿数据 Bonree ONE 2024 春季正式版焕新发布。同时&#xff0c;博睿数据AIOps首席专家兼产品总监贺安辉携核心产品新一代一体化智能可观测平台 Bonree ONE 亮相第二十二届 GOPS 全球运维大会深圳站。 Bonree ONE 2024 春季版产品重点升级数据采集、…

Docker数据卷的使用

1 数据卷概念 数据卷是一个共给容器使用的特殊文件目录&#xff0c;位于容器中&#xff0c;可以将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改立刻可见&#xff0c;并且更新数据卷不会影响到容器的使用&#xff0c;从而实现数据在主机和容器之间共享。 2 创建数据…

Scala 04 —— Scala Puzzle 拓展

Scala 04 —— Scala Puzzle 拓展 文章目录 Scala 04 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…

C语言——贪吃蛇游戏的实现

目录 一. 贪吃蛇的介绍 二. Win32 API 1. 控制台程序 2. COORD 控制台屏幕上的坐标 3. GetStdHandle 4. GetConsoleCursorInfo CONSOLE_CURSOR_INFO 5. SetConsoleCursorInfo 6. SetConsoleCursorPosition 封装的SetPos函数 7. GetAsyncKeyState 宏定义KEY_PRESS 三…

C++感受6-Hello World 交互版

变量、常量输入、输出、流getline() 函数读入整行输入Hello() 函数复习新定义函数 Input() 实现友好的人机交互还有 “痘痘” 为什么挤不到的分析…… 1. DRY 原则简介 上一节课&#xff0c;我们写了两版“问候”程序。第一版的最大问题是重复的内容比较多&#xff0c;每一次问…

C++ 核心编程(1)

c面向对象编程 1.内存分区模型 程序运行前为代码区和全局区。程序运行后才有栈区和堆区。。 1.1 程序运行前 #include<iostream> #include <bits/stdc.h> using namespace std; /*全局区全局变量、静态变量、常量 */ //全局变量 int g_1 20; int g_2 30; //const…

在Go项目中使用ELK进行日志采集

在当今企业级应用开发中&#xff0c;日志管理和分析是非常重要的部分。ELK Stack&#xff08;Elasticsearch、Logstash、和Kibana&#xff09;是一套广泛使用的开源工具&#xff0c;用于日志的收集、存储、搜索、分析与可视化。本文将深入解析如何在Go项目中实现ELK日志采集&am…