问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文详解ORM框架:概念、作用与使用方法

创作时间:
作者:
@小白创作中心

一文详解ORM框架:概念、作用与使用方法

引用
1
来源
1.
https://www.cnblogs.com/fei-yu-plus/articles/18081978

ORM(对象关系映射)是一种强大的数据操作工具,它允许开发者以面向对象的方式对数据库进行增删改查,而无需关注底层数据库的细节。本文将详细介绍ORM的概念、作用和使用方法,并通过对比ORM和直接使用SQL语句的方式,帮助读者更好地理解ORM的优势。

ORM是什么

ORM(Object Relational Mapping)是一种强大的数据操作工具,它允许开发者以面向对象的方式对数据库进行增删改查,而无需关注底层数据库的细节。ORM的核心功能是在程序中的对象和关系型数据库之间建立映射关系,这样就可以用面向对象的方式,方便快捷地操作数据。

具体的映射关系如下:

为什么使用ORM

数据操作是实现功能的核心,大部分应用程序都有大量数据查询需求。用户在前端页面每一次操作的背后,几乎都离不开后端程序的数据操作。因此掌握一个强大的数据操作工具对日常开发有很大帮助。

ORM的强大源于它的设计。通过下图,可以了解应用程序是如何实现数据的增删改查的。

通过这个图我们可以得到以下三点信息:

  1. ORM就是处于持久化层的一个东西
  2. ORM支撑了数据的增删改查
  3. ORM接收业务层指令后最终还是转换成SQL语句,发送给数据库API驱动器

使用Python ORM进行数据查询

以下是使用Python ORM中的SQLAlchemy进行user数据表的查询示例:

from sqlalchemy import create_engine, Column, Integer, String 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy.ext.declarative import declarative_base 
 
# 初始化一个数据库链接对象
Engine = create_engine('postgresql://user:password@localhost/mydatabase') 
# 建立一个会话工厂类
Session = sessionmaker(bind=Engine) 
 
# 声明一个模型基类
Base = declarative_base() 
 
# 继承模型基类,定义User模型
class User(Base): 
    __tablename__ = 'users' 
 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 
    email = Column(String) 
 
# 创建一个会话对象
session = Session() 
 
# 使用ORM查询user模型对应数据库数据
users = session.query(User).all() 
 
# 关闭会话
session.close() 

以下是使用SQL进行同样的查询示例:

import psycopg2 
 
# 创建数据库链接
conn = psycopg2.connect( 
    host="localhost", 
    database="mydatabase", 
    user="user", 
    password="password") 
 
# 创建一个cursor(类似于会话对象)
cur = conn.cursor() 
 
# 使用sql语句执行查询
cur.execute("SELECT * FROM users") 
 
# 获得查询结果
users = cur.fetchall() 
 
# 关闭连接
cur.close() 
conn.close() 

对比两个示例,可以发现ORM需要多一步,定义数据库映射模型类。

ORM vs. SQL

ORM为业务层提供了更友好的接口,但其最后还是将业务层的指令转换为SQL语句。为什么不直接使用SQL?使用ORM有什么其他优势吗?

接下来我们从各个方面对比一下两者的区别:

  1. 代码可读性:ORM使用面向对象的方式,代码更易于理解和维护。而直接使用SQL语句,需要编写大量的SQL代码,可读性较差。

  2. 开发效率:ORM提供了丰富的功能,可以大大减少开发时间。而直接使用SQL语句,需要手动处理数据库连接、事务管理等底层细节,开发效率较低。

  3. 数据库移植性:ORM可以屏蔽不同数据库之间的差异,使得应用程序更容易移植到不同的数据库。而直接使用SQL语句,需要针对不同的数据库编写不同的SQL代码。

  4. 安全性:ORM可以自动处理SQL注入等安全问题。而直接使用SQL语句,需要手动处理这些安全问题,容易出现漏洞。

其他语言的ORM框架

ORM不是Python语言独有的,其他面向对象语言也有ORM框架。例如,Java有Hibernate,C#有Entity Framework等。

参考资料

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号