专栏首页Python程序员杂谈科普文-什么是ORM

科普文-什么是ORM

有人说ORM是天使,也有人说ORM是噩梦

ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。

从代码上来看吧。拿Django的model来举例:

from django.db import models


class User(models.Model):
    name = models.CharField(max_length=255)

对应的数据库中可能就是一个表:user,里面有一个字段(我们假设不定义的自动不存在,包括主键),那就是name 类型是varchar(255)。

那么,如果我们有一个User的实例,比如:

user = User()
user.name = 'the5fire'
user.save()   # 存入数据库

那么对应着数据库中就有一条记录,name为the5fire。此时的user实例,对应的正是这个表的这一条记录。

用ORM的好处就是你不用操作表,可以在程序中用面向对象的思路,直接操作对象即可。比如上面那个代码,我要插入一条语句,直接user.save()即可。ORM会帮我们产生一条SQL语句。

INSERT INTO user(name) VALUES("the5fire");

当然这只是从对象到SQL的映射,还有从SQL到对象的映射,也是类似的过程。我在之前那篇文章Django分表的两个方案中也有提及到,可以一并看看。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [科普文]什么是ORM中的N+1

    这篇我们来解释什么是N+1的问题,在所有的ORM中,这都会是一个问题,新手很容易踩到坑。进而导致系统变慢,然后拖垮整个系统。

    the5fire
  • django 自定义后台图片上传

    今天终于是抽时间完成了后台上传图片的功能,确切的说是上传文件的功能。终于可以在blog方便的插入自己的图片了,之前不做这个功能是觉得服务器在国外,弄个图片上去图...

    the5fire
  • Django项目Mysql添加索引

    在Django数据库访问优化中一开始的时候就有提到Django有一个Field.db_index的字段,用来帮你建立表索引,这在初始化数据库时是有效的。数据库建...

    the5fire
  • Python数据分析之dataframe的groupbygroupby函数highcharts绘图

    罗罗攀
  • SQL增删改查

    深浅无解
  • 手牵手从零开始带你走通整个mybatis开发流程

    经过前两篇文章《Mybatis系列之入门》和《Mybatis系列之配置》的介绍,我们对Mybatis有了一定的了解,下面就接合一个实例学习案例,来巩固一下我们前...

    好好学java
  • C# 使用SqlBulkCopy类批量复制大数据

    特别注意  sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].Col...

    跟着阿笨一起玩NET
  • Python提取json数据

    py3study
  • ThinkPHP6.0学习笔记-模型操作

    模型的数据字段和对应的数据表字段是对应的,默认会自动获取(以及类型),自动获取的过程会加一次查询操作(浪费资源),thinkphp支持自定义字段信息。

    Mirror王宇阳
  • cassandra简单介绍与基本操作

      项目中用到了cassandra,用来存储海量数据,且要有高效的查询;本博客就进行简单的介绍和进行一些基本的操作

扫码关注云+社区

领取腾讯云代金券