以SQLAlchemy 为例带大家了解什么是ORM

SQLAlchemy简介

SQLAlchemy是Python SQL工具包和对象关系映射器,是python中最著名的ORM(Object Relationship Mapping)框架,它简化了应用程序开发人员在原生SQL上的操作,使开发人员将主要精力都放在程序逻辑上,从而提高开发效率。

ORMObject-Relational Mapping

ORM,即对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的问题的技术。简单的来说,ORM框架其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。ORM通过将关系型数据库中的表、列、行等数据映射到编程语言中的对象、属性、方法等,以方便程序员进行数据库操作。

ORM的四大核心要素是数据映射、实体操作、查询语言、事务处理。数据映射将程序中的对象映射到数据库中的数据,实现了两者的关联。实体操作则包括增删改查,通过操作实体对象来操作数据库。查询语言可以通过面向对象的方式来查询数据库,而事务处理可以实现事务的提交和回滚。

ORM优点

减少了手写SQL的工作量

ORM可以将数据库中的数据表映射为面向对象的类,通过面向对象的方式来操作数据库,使得开发人员可以更加方便地进行数据持久化操作,减少了手写SQL的工作量。

隐藏了底层数据库的细节

ORM框架隐藏了底层数据库的细节,使得开发人员可以更加专注于业务逻辑的实现,提高了开发效率。

通过面向对象的方式来操作数据库

ORM通过面向对象的方式来操作数据库,使得代码更加易于维护和扩展,同时也提高了代码的可读性和可重用性。

支持多种数据库

ORM框架支持多种数据库,使得开发人员可以更加灵活地选择数据库,提高了代码的可移植性和可扩展性。

提高了开发效率

ORM减少了手写SQL的工作量,隔离了底层数据库的细节,使得开发人员可以更加专注于业务逻辑的实现,提高了开发效率。

提高了代码质量

ORM通过面向对象的方式来操作数据库,使得代码更加易于维护和扩展,同时也提高了代码的可读性和可重用性,从而提高了代码质量。

ORM缺

(1)性能问题: ORM框架为了提高开发效率,做了很多封装,但这些封装可能会增加系统的开销,如果使用不当,可能会导致性能问题。

(2)过度依赖: 如果过度依赖ORM框架,开发者可能会忽视底层的数据库知识,当遇到复杂的数据库问题时,可能会束手无策。

(3)不适合复杂的数据库操作: 对于一些复杂的数据库操作,ORM框架可能无法满足需求,还需要开发者手动编写SQL语句。

ORM与传统SQL书写的比较

假设我们有一个名为 users 的数据库表,包含字段 idusername, 和 email,我们需要查询所有用户的信息。

SQL 查询语句

SELECT * FROM users;

SQLAlchemy ORM查询

在 SQLAlchemy ORM 中,我们会首先定义一个与 users 表对应的 Python 类,然后使用这个类来构造查询。

class User(Base):  
    __tablename__ = 'users'  
    id = Column(Integer, primary_key=True)  
    username = Column(String)  
    email = Column(String)  
  
    def __repr__(self):  
        return f"<User(id={self.id}, username='{self.username}', email='{self.email}')>"

# 假设 engine 已经创建并连接到数据库  
# Session = sessionmaker(bind=engine)  
# session = Session()  
  
# 使用 ORM 查询所有用户  
users = session.query(User).all()  
  
# 打印查询结果  
for user in users:  
    print(user)

我们可以看到ORM 代码量确实多,但是他可以避免不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护,这点个人觉得是其最大的优势!!!

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值