当前位置: 代码网 > it编程>编程语言>Asp.net > Django ORM是什么?初学者必看对象关系映射详解

Django ORM是什么?初学者必看对象关系映射详解

2026年07月17日 Asp.net 我要评论
当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:创建数据库,设计表结构和字段;使用 mysqldb 来连接数据库,并编写数据访问层代码;业务逻辑层去调用数据访问层执行数据库操作。orm的概念o

当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:

  1. 创建数据库,设计表结构和字段;
  2. 使用 mysqldb 来连接数据库,并编写数据访问层代码;
  3. 业务逻辑层去调用数据访问层执行数据库操作。

orm的概念

orm:object relational mapping(对象关系映射),是使用面向对象的思维来操作数据库。

python中类名 --------------对应---------->数据库中的表名

python类属性 -----------对应--------->数据库里的字段

python类实例------------对应--------->数据库表里的一行数据

obj.id obj.name.....类实例对象的属性。

在django中,根据代码中的类自动生成数据库的表也叫–code first

django orm的优势:

  1. django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;

  2. 所有使用django开发的项目无需关心程序底层使用的是mysql、oracle、sqlite…,如果数据库迁移,只需要更换django的数据库引擎即可。

常用字段

  • autofieldint自增列,必须填入参数 primary_key=true。当model中如果没有自增列,则自动会创建一个列名为id的列。

  • integerfield一个整数类型,范围在 -2147483648 to 2147483647。

  • charfield字符类型,必须提供max_length参数, max_length表示字符长度。

  • datefield日期字段,日期格式 yyyy-mm-dd,相当于python中的datetime.date()实例。

  • datetimefield日期时间字段,格式 yyyy-mm-dd hh:mm[:ss[.uuuuuu]][tz],相当于python中的datetime.datetime()实例。

一、将用户保存到数据库(增)

  1. 创建模型类,生成对应的数据库表格

models.py 文件:

from django.db import models

class person(models.model):
    id = models.autofield(primary_key=true)
    name = models.charfield(max_length=32, null=false, unique=true)
    age = models.integerfield()
    birthday = models.datefield()  # 日期, yyyy-mm-dd

    def __str__(self):
        msg = 'name:{}'.format(self.name)
        return msg

    class meta():
        db_table = 'person'  # 修改数据库中表格的名称为 person
  1. 在命令行下执行

(1)、同步数据库 : python manage.py makemigrations

(2)、写入数据库: python manage.py migrate

  1. 将表单数据保存到数据库

格式:类名.objects.create()

类实例化:obj=models.类(属性=xx) obj.save()

页面显示 add_person.html:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>添加用户</title>
</head>
<body>
<form action="/app01/add_person/" method="post">
    {% csrf_token %}
    <p>
        用户名: <input type="text" name="username">
    </p>
    <p>
        年龄: <input type="text" name="age">
    </p>
    <p>
        生日: <input type="text" name="bir">
    </p>
    <p>
        <input type="submit" value="添加">
    </p>
</form>
</body>
</html>

views.py 文件:

def add_person(request):
    # 1.判断请求方式
    if request.method == 'post':
        # 2. 获取表单提交过来的数据
        usrname = request.post.get('username')
        age = request.post.get('age')
        bir = request.post.get('bir')
        # 3. 保存到数据库
        models.person.objects.create(name=usrname, age=age, birthday=bir)
        # 重定向到所有用户页面
        return redirect('/app01/all_person/')
    return render(request, 'app01/add_person.html')

二、显示用户列表

语法: 类名.objects.all() 获取所有记录

views.py 文件:

def all_person(request):
    """展示所有的用户"""
    # 1.查询数据库中所有的记录
    person_lst = models.person.objects.all()  # 获取所有对象
    # print(person_lst)
    # <queryset [<person: person object (3)>]> 是queryset类型的列表,当成list使用。
    # 2.展示到页面上
    return render(request, 'app01/all_person.html', {'person_lst': person_lst})

all_person.html文件:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>title</title>
</head>
<body>
<a href="/app01/add_person/" rel="external nofollow" >添加用户</a>
<table border="1">
    <tr>
        <td>序号</td>
        <td>id</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>生日</td>
        <td>操作</td>
    </tr>
    {% for person in person_lst %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ person.id }}</td>
            <td>{{ person.name }}</td>
            <td>{{ person.age }}</td>
            <td>{{ person.birthday|date:'y-m-d' }}</td>
            <td>
                <a href="/app01/edit_person/?id={{ person.id }}" rel="external nofollow" >修改</a>
                <a href="/app01/delete_person/?id={{ person.id }}" rel="external nofollow" >删除</a>
            </td>
        </tr>
    {% endfor %}
</table>
</body>
</html>

三、删除用户

(1)语法:

类名.objects.get(xxx).delete()

类名.objects.filter(xxx).delete()

views.py 文件:

def delete_person(request):
    """根据id删除用户"""
    # 1.获取表单传递过来的id
    ids = request.get.get('id')
    # print(id)
    # 2.删除数据库中对应的记录
    # person_obj = models.person.objects.get(id=ids)  # 获取 person对象
    # print(person_obj) # person object (3)
    # person_obj.delete()  # 删除数据库中的记录
    ret = models.person.objects.filter(id=ids)  # filter() 根据条件进行过滤。
    ret.delete()
    print(ret)  # <queryset [<person: person object (3)>]>

    # 3.删除成功后,重定向到展示所有用户的界面
    return redirect('/app01/all_person/')

模板已经在上面写出

四、修改用户

(1)语法:

obj =类名.objects.get(‘xxx') 
obj.zz = xx
obj.save()

类名.objects.filter(‘xxx’).update(关键字(类中的属性)=值.....)

def edit_person(request):
    """修改用户"""
    if request.method == 'post':
        # 1.获取提交过来的数据
        usrname = request.post.get('username')
        age = request.post.get('age')
        bir = request.post.get('bir')
        # 2.根据唯一标识去数据库中查询出对象
        # id = request.post.get('id')
        # person_obj = models.person.objects.get(id=id)
        # # 对象重新赋值
        # # 3.再将新的数据赋值给对象
        # person_obj.name = usrname
        # person_obj.age = age
        # person_obj.birthday = bir
        # person_obj.save()  # 将对象保存到数据库
        # 第二种方式保存修改数据:使用filter()  返回 queryset 集合,使用 update() 方法。
        id = request.post.get('id')
        models.person.objects.filter(id=id).update(name=usrname, age=age, birthday=bir)

        # 修改成功后重定向到所有用户页面
        return redirect('/app01/all_person/')
    else:
        """get 请求"""
    # 1.获取 表单提交过来的id
    id = request.get.get('id')
    # 2. 根据id去数据库中查询记录
    person_obj = models.person.objects.get(id=id)
    # 3. 显示到页面上
    return render(request, 'app01/edit_person.html', {'person_obj': person_obj})

edit_person.html文件

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>修改用户</title>
</head>
<body>
<form action="/app01/edit_person/" method="post">
    <p>
        <input type="hidden" name="id" value="{{ person_obj.id }}">
    </p>
    {% csrf_token %}
    <p>
        用户名: <input type="text" name="username" value="{{ person_obj.name }}">
    </p>
    <p>
        年龄: <input type="text" name="age" value="{{ person_obj.age }}">
    </p>
    <p>
        生日: <input type="text" name="bir" value="{{ person_obj.birthday|date:'y-m-d' }}">
    </p>
    <p>
        <input type="submit" value="保存">
    </p>
</form>
</body>
</html>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com