一文详解ORM框架:概念、作用与使用方法
一文详解ORM框架:概念、作用与使用方法
ORM(对象关系映射)是一种强大的数据操作工具,它允许开发者以面向对象的方式对数据库进行增删改查,而无需关注底层数据库的细节。本文将详细介绍ORM的概念、作用和使用方法,并通过对比ORM和直接使用SQL语句的方式,帮助读者更好地理解ORM的优势。
ORM是什么
ORM(Object Relational Mapping)是一种强大的数据操作工具,它允许开发者以面向对象的方式对数据库进行增删改查,而无需关注底层数据库的细节。ORM的核心功能是在程序中的对象和关系型数据库之间建立映射关系,这样就可以用面向对象的方式,方便快捷地操作数据。
具体的映射关系如下:
为什么使用ORM
数据操作是实现功能的核心,大部分应用程序都有大量数据查询需求。用户在前端页面每一次操作的背后,几乎都离不开后端程序的数据操作。因此掌握一个强大的数据操作工具对日常开发有很大帮助。
ORM的强大源于它的设计。通过下图,可以了解应用程序是如何实现数据的增删改查的。
通过这个图我们可以得到以下三点信息:
- ORM就是处于持久化层的一个东西
- ORM支撑了数据的增删改查
- 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有什么其他优势吗?
接下来我们从各个方面对比一下两者的区别:
代码可读性:ORM使用面向对象的方式,代码更易于理解和维护。而直接使用SQL语句,需要编写大量的SQL代码,可读性较差。
开发效率:ORM提供了丰富的功能,可以大大减少开发时间。而直接使用SQL语句,需要手动处理数据库连接、事务管理等底层细节,开发效率较低。
数据库移植性:ORM可以屏蔽不同数据库之间的差异,使得应用程序更容易移植到不同的数据库。而直接使用SQL语句,需要针对不同的数据库编写不同的SQL代码。
安全性:ORM可以自动处理SQL注入等安全问题。而直接使用SQL语句,需要手动处理这些安全问题,容易出现漏洞。
其他语言的ORM框架
ORM不是Python语言独有的,其他面向对象语言也有ORM框架。例如,Java有Hibernate,C#有Entity Framework等。