Django框架(十:orm操作)

model.py文件介绍:
model.py这个文件中定义的model模型,对应的是数据库中的表及字段。

操作数据库的两个命令:
1.python manage.py makemigrations 作用:收集model.py文件中发生变化的模型类,执行这个命令,如果出现No change detected,说明django没有检测到当前model发生变化
2.python manage.py migrate 作用:将model模型的这些变化(增删改)同步至数据库中,因为model对应的就是表和字段,所以只要是model发生变化,一定要同步至数据库,保证model和数据库内容一致。

所以:第二个命令python manage.py migrate,在项目第一次运行时必须执行,会生成Django框架内置的数据库到本地。

如何向数据库中,添加自定义表及相关字段?
1.定义一个model类,该类声明字段。
2.执行上面两条命令,生成数据库,表和相应的字段

class People(models.Model):
    # primary_key=True: 表示一个table表的主键,既然pid这个字段作为主键,那么这个字段默认带有一些约束:非空、唯一。
    # AutoField()表示的是一个自动递增的整数字段,一般用于表示主键。如果model中设置了主键,那么表中就采用model设置的主键。如果Model没有设置主键,表会自动生成一个id主键。
    pid = models.AutoField(primary_key=True)

    # CharFields must define a 'max_length' attribute.
    # max_length:用于设置这个字符串的长度。一般范围在0-255。根据内容长度的大小设置合适的Max_lenght,主要是为了节省内存空间。
    user_name = models.CharField(max_length=50)

    # null=True 表示数据库中的user_height字段的值可以为空,默认值是False不能为空.
    # 但是null的值会受到default的值的影响,如果一个字段没有指定default默认值,那么Django将default的默认值设置为空字符串。空字符串也是表示值存在的。
    # Django在加载这些字段的时候,会依次读取每一个字段的默认值default。如果model存在默认值就直接使用,如果model没有指定默认值,会采用Django内部封装的默认值(空字符串'')。

    # blank=True 表示html页面中,在填写这个字段时是否必须要填写,True表示页面中这个字段的数据可以忽略不写,False表示页面中这个字段的数据必须要填写。一般这个blank针对的是表单数据。
    user_height = models.IntegerField(null=True, blank=True)

    # null的值对字段的影响:
    # null=False 空:指的是user_name的值不能为NULL(等价于None),保证user_name的值是存在的,即便是一个空字符串也表示值不为空。''也是一个对象。

    class Meta:
        # 默认的表名是:当前app的名称_模型的名称.
        db_table = 'people'

modes.py文件中定义好表之后,在views.py文件中进行增删改查等操作

from django.shortcuts import render
# 导入models.py中设置的类
from .models import People
from django.http import HttpResponse

"""
Django框架的数据库操作:这里的数据库操作并没有采用原始的sql语句的形式,而是采用了ORM技术实现数据的增删改查。这里的ORM指的是对象关系映射(Object Relational Mapping),它是将表与表之间的关系映射为了对象与对象之间的关系,在这里操作对象就是在操作表。所有表的增删改查都是基于对象来完成的。
关系型数据库:多表联查。表与表之间的关系非常重要,表关系映射变成对象关系映射。

通过这种方式操作数据库,可以有效的防止SQL语句注入的风险。
insert into;
delete from student;
() values ();
"""

def insert_data(request):
    # 第一种添加数据
    # People.objects.create(user_name='张三', user_height=100)

    # 第二种添加数据
    # p = People(user_name='zs')
    # p.save()

    # 第三种添加数据
    # p = People()
    # p.user_name = '李四'
    # p.user_height = 170
    # p.save()

    # 第四种添加数据
    # 在创建新的数据之前,先查询数据库中是否已经存在对应的数据,如果已经存在就不再创建这个对象了。可以起到一定的去重作用。
    People.objects.get_or_create(user_name='lisi', user_height=180)

    return HttpResponse('数据添加成功')

def select_data(request):
    # 数据的查询
    # 1. 单条数据查询: get(),参数就是查询条件,可以是类中的属性。
    # p = People.objects.get(user_name='lisi')

    # 2. 多条数据查询:filter(),参数就是查询条件,查询结果是一个结果集QuerySet。
    # p = People.objects.filter(user_height=170).first()

    # 3. 查询所有数据:all(),返回值也是一个结果集QuerySet。
    # p = People.objects.all()

    # return render(request, 'index.html', {'p': p})

    # 数据的修改
    p = People.objects.get(user_name='lisi')
    p.user_height = 80
    p.save()

    # update():参数就是更新的数据。这个函数是更新所有的数据。
    People.objects.update(user_height=180)

    # 数据的删除
    People.objects.get(user_name='lisi').delete()

    return HttpResponse('数据修改成功!')

Django框架默认的数据库死sqlite3,如果你需要设置为mysql,可在settings.py文件中设置,有关参数根据自己的实际情况设置
在这里插入图片描述

注意:如果你是转移数据库,在之前已经有运行过上面介绍的两条命令了,在再次执行的时候一定要把migrations目录下的文件记录删除,再运行,否则将会报错,因为你之前对数据库的操作会记录在里面,运行时会读取里面的记录。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值