Django操作数据库

setting.py设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'user',
        'PASSWORD': '密码',
        'HOST': 'localhost',
        'NAME': 'djangodb'
    }
}

views.py中详解数据的增删改查

from django.shortcuts import render
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('数据修改成功!')

最重要的models.py文件

from django.db import models

# Create your models here.
"""
model.py这个文件中定义的model模型,对应的是数据库中的表及字段。ORM

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

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

"""

# 如何向数据库中,添加自定义表以及相关字段?
# 1. 定义一个model类;该类中声明字段;
# 2. 执行makemigrations和migrate命令,将这个model类映射为数据库中的表;model类中的属性映射为表的字段;

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'

 

posted @ 2018-11-22 15:44  陈桑啊丶  阅读(231)  评论(0编辑  收藏  举报