sqlalchemy封装自用

SQLAlchemy学习的一点心得 SQLAlchemy 是 Python SQL 工具包和对象关系映射器,为应用程序开发人员提供 SQL 的全部功能和灵活性。SQLAlchemy支持SQLite、PostgreSQL、Oracle、MySQL、MariaDB、Microsoft SQL Server等多种数据库。 阅读详情

前言

  • 网上的文章抄来抄去,本文也是😅
  • 之前用pymysql很爽,因为简单
  • 用cx_Oracle操作数据库,bug蛮多,尤其在公司Oracle命名不规范的情况下
  • 只好改用sqlalchemy,bug少了,但是代码丑了不少,找接口的过程也是呕心沥血
  • 下面是sqlalchemy的一些个人总结,包含一些藏得比较深的接口
    (alchemy 🔉 /ˈælkəmi/ 📖 n. 点金术;魔力)

ORM

  • 对象关系映射(Object Relational Mapping):
    对象,是指 面向对象编程语言 中的对象
    关系,是指 关系数据库模型
    映射,是对 面向对象编程语言中的对象 和 关系数据库模型中的数据 建立关系

  • 例如:
    用一个Python的Student类,去对应数据库中的一张student表
    类中的属性 对应 表中的列
    一个Student对象 对应 student表中的一行数据
    Student对象的add()方法 对应 数据库的insert语句

  • 优点:
    ORM框架能自动生成SQL语句,提高了开发效率,让程序员可以专注于业务代码上
    提高代码移植性

  • 缺点
    执行效率低于直接写SQL
    不适用于复杂的查询

sqlalchemy

SQL Alchemy是Python的一款ORM框架,可将 对象操作 转换成 SQL

# 创建连接引擎,这个engine是lazy模式,直到第一次被使用才真实创建
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/z?charset=utf8')

# 设计 表的基类
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer
Base = declarative_base()
class Student(Base):
    __tablename__ = 'student'  # 表名
    sid = Column(String(20), primary_key=True, comment='学号')  # 表字段
    age = Column(Integer, comment='年龄')  # 表字段
    __table_args__ = {
   
   'comment': '学生信息表'}  # 表注释
# 执行建表操作(继承Base的所有表)
Base.metadata.create_all(bind=engine)

# 创建ORM
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)  # 创建ORM基类
session = Session()  # 创建ORM对象
# 添加数据
tb_obj = Student(sid='a6', age=1)  # 创建表对象
session.add(tb_obj)  # 添加到ORM对象
session.commit()  # 提交
# 查询、修改
result = session.query(Student).filter_by(sid='a6').first()  # 查询
print(result)
result.age = 2  # 修改
session.commit()  # 提交
# 关闭ORM对象
session.close()

封装思想(3 parts)

  • 1️⃣ 创建连接引擎,这个engine是lazy模式,直到第一次被使用才真实创建
  • 这个engine可直接执行sql语句,其execute还包含commit操作,返回对象具有fetchall、fetchone等方法
from sqlalchemy import create_engine
# 创建引擎
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/z?charset=utf8')
# 执行sql
engine.execute('create table if not EXISTS t1(sid int PRIMARY KEY auto_increment,name char(32));')  # 建表
engine.execute('insert into t1 values(%(sid)s,%(name)s);', name='egon2', sid=2)  # 插入
engine.execute('insert into t1 values(%(sid)s,%(name)s);', name='egon7', sid=7)  # 插入
cur = engine.execute('select * from t1')  # 查询
print(cur.fetchone(), cur.fetchall())
print(type(cur), dir(cur))
engine.execute('drop table t1;')  # 删表
  • 2️⃣ 类 -> 表
from sqlalchemy import Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()  # 表的基类

class Student(Base):
    __tablename__ = 'student'
    sid = Column(String(20), primary_key=True)
    age = Column(Integer)

def create_tables(bind=engine):
    Base.metadata.create_all(bind=bind)  # 执行建表操作(继承Base的所有表)

def drop_tables(bind=engine):
    Base.metadata.drop_all(bind=bind)  # 执行删表操作(继承Base的所有表)
  • 3️⃣ 对象 -> 表中的记录
  • 4️⃣ sqlalchemy.orm.sessionmaker进行增删查改操作
class ORM:
    def __init__(self
SQLAIchemy 异步DBManager封装-01入门理解 SQLAlchemy 是一个强大的 Python SQL 工具包和对象关系映射(ORM)系统,是业内比较流行的ORM,设计非常优雅。随着其2.0版本的发布,SQLAlchemy 引入了原生的异步支持,这极大地增强了其在处理高并发和异步I/O场景下的能力。通过结合像greenlet、gevent这样的协程库,SQLAlchemy 使得异步数据库操作成为可能,从而提高了应用程序的性能和响应速度。 阅读详情

相关推荐

Python SQLAlchemy介绍

SQLAlchemy是Python中最有名的ORM工具。

猫敷雪 1377

SQLAIchemy 异步DBManager封装-02熟悉掌握

在上一篇文章中我们深入讨论了SQLAlchemy异步DBManager整体的封装结构与思路。详细地介绍了如何封装添加和批量添加的操作方法,并通过实际示例进行了演示。SQL 全称是结构化查询语言,无疑查询是最复杂的部分。因此,在这篇文章中,我将详细介绍如何封装通用的数据库查询方法,并通过具体的示例来讲解这一过程,使得这一复杂的任务变得更为简单。

qq_43629857的博客 1375

用 SQLAlchemy 封装一个连接 PostgreSQL 的优雅且实用的增删改查脚本

本文介绍了一个基于Python和SQLAlchemy的数据库操作封装脚本,采用配置与代码分离的设计原则,提供优雅的数据库会话管理和CRUD操作封装。项目结构清晰,包含config.py(数据库配置)、models.py(数据模型定义)和database.py(核心功能封装)三个主要文件。脚本通过上下文管理器实现自动会话管理,支持事务提交和回滚,并提供了通用CRUD操作类CRUDBase以及针对User模型的扩展类CRUDUser。该封装具有实用性强、可维护性高、健壮性好等特点,可作为构建复杂应用(如Web

数据知道的博客 3201

超详细Matlab R2021a免费安装教程(附安装包)

Matlab是一种高级技术计算语言和交互式环境,用于算法开发、数据可视化和数值计算。它集成了数学、工程和科学计算的丰富函数库,提供了强大的数据分析和绘图工具。Matlab还支持并行计算和大规模数据处理,适用于各种领域,如信号处理、图像处理、控制系统、机器学习等。

waicsdn_haha的博客 1万+

Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)

目录 一、Java的打印简介 二、Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行打印实现。 2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用) 三、总结 一、Java的打印简介 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Jav...

vatxiongxiaohui的专栏 8万+

VBOX 3iS实战:如何用GNSS+IMU搞定车辆动态坡度测量(附避坑指南)

本文详细介绍了VBOX 3iS在车辆动态坡度测量中的高阶应用,通过GNSS+IMU融合技术和卡尔曼滤波算法,有效解决了传统测量方法在动态环境中的局限性。文章提供了设备配置、实战策略和数据后处理的实用指南,帮助工程师提升测量精度和效率。

weixin_42520796的博客 322

别再乱删文件了!修复Print Spooler服务自动停止的3个关键检查点(附Win10/Win11实测)

本文深入解析Windows系统中Print Spooler服务自动停止的常见原因及修复方法。从第三方驱动冲突、权限与服务依赖关系到打印队列积压,提供3个关键检查点的详细排查步骤,帮助用户彻底解决打印服务异常问题,适用于Win10/Win11系统。

weixin_31569671的博客 682

使用ST-LINK烧录stm32教程说明

使用ST-LINK烧录stm32

qq_34426854的博客 1万+

ESP-Mesh-Lite vs ESP-Mesh:如何选择适合你的物联网组网方案?

本文深入对比了乐鑫ESP-Mesh-Lite与ESP-Mesh两种物联网组网方案的核心差异。重点解析了ESP-Mesh-Lite分布式协议栈架构的优势,即每个节点拥有独立IP,可直接访问外部网络,极大简化了应用层开发。文章从网络架构、性能、开发体验及适用场景等多维度进行分析,为开发者根据项目需求(如分布式数据采集、智能家居或集中控制网络)选择最合适的方案提供了清晰的决策框架。

pluto的博客 817

Excel 汉字首字母提取:四种方案对比与选型

本文对比了 Excel 中提取汉字首字母的四种方案:手动转换、VBA 脚本、映射表与 AI 工具。手动方式低效易错;VBA 适合无网环境但识别范围有限;映射表精度提升却无法解决多音字;AI 工具通过语义理解可一句话完成提取,是多数场景下的首选。

u011186532的专栏 397

使用再生龙备份还原liunx系统(精确每一步)

再生龙镜像可自行到官网下载(ISO/ZIP格式均可),然后使用tuxboot烧录工具制作启动盘,另外准备一个U盘用来存储备份的镜像文件,即再生龙盘和存储盘是两个分开的。当然也可以用分区工具把同一个硬盘分区来使用,比较方便,先学会基本的吧,只是告诉有个捷径,省个U盘。

米可的博客! 8381

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: WIN10安装MySQL8;CentOS7安装MySQL8
下一篇: Python找接口
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值