day2 数据表 2018-08-07

1.隔离app(app的urls索引设定)

1. 1 工程目录下的urls.py

from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'app1/', include('app1.urls')), # 隔离app  ; 注意导入include函数
]

1. 2 复制urls.py到app目录下,负责app的路由作用

from django.conf.urls import url
from app1 import views

urlpatterns = [
    # 127.0.0.1:8080/app1/helloworld/ 访问地址
    url(r'helloworld', views.hello),
]

2. 数据表的操作CRUD

创建可迁移文件 - migrations : python manage.py makemigrations

迁移 : python manage.py migrate

2.1 创建学生表(models.py)

对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 ,从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

from django.db import models

# Create your models here.
# ORM   创建学生表
class Student(models.Model):
    
    s_name = models.CharField(max_length=10, unique=True)
    s_age = models.IntegerField(default=16)
    s_sex = models.BooleanField(default=1)
    operater_time = models.DateTimeField(auto_now=True)
    # auto_now_add 添加一次时间就不再变更
    create_time = models.DateTimeField(auto_now_add=True, null=True)

    class Meta:
        db_table = 'student'

    def to_dict(self):
        return {
            's_name': self.s_name,
            's_age': self.s_age,
            's_sex': self.s_sex,
        }

2.2 查询所有学生信息

stus = Student.objects.all() --> 结果是一个查询集 QuerySet

将查询结果(对象)转换为字典

(models.py)

    def to_dict(self):
        return {
            's_name': self.s_name,
            's_age': self.s_age,
            's_sex': self.s_sex,
        }

(views.py)

stus_list = [stu.to_dict() for stu in stus]

2.3 条件查询

2.3.1 filter() 过滤带条件的信息(QuerySet)

查询年龄等于15的学生
stus = Student.objects.filter(s_age=15)

2,3,2 exclude() 不包含;查询年龄不等于15的学生

stus = Student.objects.exclude(s_age=15)

2.3.3 order_by() 排序

降序

stus = Student.objects.all().order_by('-id')

升序 (默认)

stus = Student.objects.all().order_by('id')

2.3.4 valuse() --> 将结果以字典的形式返回

stus = Student.objects.all().values()

2.3.5 get() (和filter()的区别) :get()查询结果是对象(object)

获取id为1的学生信息

filter 获取不到数据会返回空

stus = Student.objects.filter(id=1)

get 获取不到数据会报错; 只能返回一个数据,返回多个会报错

stus = Student.objects.get(id=1)

stus = Student.objects.get(id=1,id=2)

2.3.6 first() 获取所有学生(按照id降序)中的第一个学生信息

stus = Student.objects.all().order_by('-id').first()

2.3.7 last() 获取所有学生(按照id降序)中的最后一个学生信息

stus = Student.objects.all().order_by('-id').last()

2.3.8 模糊查询姓名

__contains

stus = Student.objects.filter(s_name__contains='小')

__startswith

stus = Student.objects.filter(s_name__startswith='小')

__endwith

stus = Student.objects.filter(s_name__endwith='小')

2.3.9 gt(大于) gte(大于等于) lt(小于) lte(小于等于)

stus = Student.objects.filter(s_age__gt=15)

stus = Student.objects.filter(s_age__gte=15)

2.3.10 __in=[] 查询id等于1,2的学生信息

stus = Student.objects.filter(id__in=[1,2,3])

2.3.11 多个条件 查询姓名中包含'小',并且年龄大于12

stus = Student.objects.filter(s_name__contains='小', s_age__gt=12)

2.3.12 F()可以将模型的两个字段进行算数运算,对字段的处理 : 查询数学成绩比语文成绩大十分的学生信息

from django.db.models import F
stus = Student.objects.filter(shuxue__gt = F('yuwen') + 10)

2.3.13 Q() 条件或运算 '~' -->表示非

from django.db.models import Q
stus = Student.objects.filter(~Q(yuwen__lt=70) | Q(s_age__lt=17))

2.4 增加数据

a. save()
def addStu(request):
    if request.method == 'GET':
        stu = Student()
        stu.s_name = '小明'
        stu.s_age = '12'
        stu.shuxue = '60'
        stu.yuwen = '70'
        stu.math = '0'

        stu.save()
        return HttpResponse('创建成功')
b. init()方法
    def __init__(self, s_name, s_age, yuwen, shuxue, math):
        super(Student, self).__init__()  # 注意要继承方法
        self.s_name = s_name
        self.s_age = s_age
        self.yuwen = yuwen
        self.math = math
        self.shuxue = shuxue

stu = Student('大明', 25, 90,90,90)
stu.save()

c. create()

Student.objects.create(s_name='妲己', yuwen=67, shuxue=56, s_age=40, math=80)

2.5 删除数据

stu = Student.objects.filter(id=1)
stu.delete()

2.6 修改数据

a.
stu = Student.objects.filter(id=2).first()
stu.s_name = 'shit'
stu.save()
b.

Student.objects.filter(id=3).update(s_name = '大罗伊斯')

你可能感兴趣的:(day2 数据表 2018-08-07)