请用通俗语言解释Object-relational mapping(ORM)并举例说明
什么是Object-relational mapping(ORM)?
ORM(对象关系映射)说白了就是帮你把数据库里的表结构和代码里的面向对象类做了一层“自动翻译”,让你不用直接写SQL语句,而是通过操作代码里的对象来完成对数据库的增删改查。
打个比方:数据库里的一张user表就对应代码里的一个User类,表中的每一行数据就是User类的一个实例对象,表的列就是对象的属性。你对对象做的任何操作,ORM都会自动转换成对应的SQL语句去执行,你不用操心底层的数据库语法。
举个实际例子对比
假设我们有个用户管理需求,数据库里有user表,包含id(主键)、name(用户名)、email(邮箱)三个字段。
不用ORM的情况
你得手动写SQL,还要处理数据库连接、结果解析:
# 假设用Python的pymysql库 import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='123456', db='test') cursor = conn.cursor() # 查询id=1的用户 cursor.execute("SELECT * FROM user WHERE id = %s", (1,)) result = cursor.fetchone() # 手动把结果转成自己的结构 user = {'id': result[0], 'name': result[1], 'email': result[2]} print(user['name']) # 插入新用户 cursor.execute("INSERT INTO user(name, email) VALUES(%s, %s)", ('张三', 'zhangsan@example.com')) conn.commit() # 关闭连接 cursor.close() conn.close()
这里你不仅要写SQL,还要手动处理结果转换、数据库连接的开闭,还得小心SQL注入(得用参数绑定)。
用ORM的情况(以Python Django ORM为例)
首先定义对应表的类:
from django.db import models class User(models.Model): name = models.CharField(max_length=100) email = models.EmailField() # 可选,让打印对象时更友好 def __str__(self): return self.name
Django会自动帮你创建对应的user表(不用手动写CREATE TABLE语句)。接下来操作数据库就像操作普通对象:
# 查询id=1的用户,直接得到User对象 user = User.objects.get(id=1) print(user.name) # 直接访问属性,不用手动解析结果 # 插入新用户 new_user = User(name='张三', email='zhangsan@example.com') new_user.save() # 自动生成INSERT语句并执行 # 更新用户邮箱 user.email = 'new_zhangsan@example.com' user.save() # 自动生成UPDATE语句 # 删除用户 user.delete() # 自动生成DELETE语句
整个过程你完全不用写SQL,用面向对象的方式就能完成所有数据库操作,ORM帮你搞定了SQL生成、参数安全、结果转换这些脏活。
ORM的核心价值
- 降低学习成本:不用死记硬背各种数据库的SQL语法,用熟悉的面向对象逻辑就能操作数据库。
- 减少重复代码:不用每次都写数据库连接、结果解析的代码,ORM已经封装好了。
- 提升安全性:自动处理参数转义,避免SQL注入风险。
- 适配多数据库:比如从MySQL切换到PostgreSQL,不用改业务代码,ORM底层会自动适配不同数据库的SQL差异。
内容的提问来源于stack exchange,提问作者soumya Ranjan Nath
相关产品推荐
相关产品推荐

