Django过滤

###连接数据库(在setting中)

1
2
3
4
5
6
7
8
9
10
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dj7',
'USER': 'root',
'PASSWORD': '123456', # 本地mysql的密码
'HOST': '127.0.0.1',
'PORT': 3306
}
}

###创建表(在models中)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.db import models


class Student(models.Model):
name = models.CharField(max_length=10, unique=True)
age = models.IntegerField(default=18)
gender = models.BooleanField(default=1)

# auto_now_add: 创建数据时,默认create_time字段为当前时间
create_time = models.DateTimeField(auto_now_add=True, null=True)
# auto_now:修改时间,每次update学生信息时,修改该字段的时间为当前时间
operate_time = models.DateTimeField(auto_now=True, null=True)

class Meta:
# 指定student模型映射到数据库中对应的表名
db_table = 'student'

建立路由(在urls中)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from app import views


urlpatterns = [
url(r'^admin/', admin.site.urls),
# 访问http://127.0.0.1:8000/add_stu/
# 新增学生数据
url(r'^add_stu/', views.add_stu),
# 删除学生数据
# 访问http://127.0.0.1:8000/del_stu/
url(r'^del_stu/', views.del_stu),
# 修改学生数据
# 访问http://127.0.0.1:8000/up_stu/
url(r'^up_stu/', views.up_stu),
]

在视图中应用(views)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from django.shortcuts import render
from django.http import HttpResponse
# 引入学生student模型
from app.models import Student

def add_stu(request):
# 像数据库中的student表中插入数据
# 第一种方式进行创建:save()
# stu = Student()
# stu.name = '小明'
# 向数据库中插入一条数据
# stu.save()

# 第二种方式
Student.objects.create(name='莫幺儿', age=19)
return HttpResponse('创建成功')



def del_stu(request):
# 实现删除
# sql: del from student where name='大锤'
# 1.查询name=‘大锤’的信息
# Student.objects.filter(name='大锤').delete()
stus = Student.objects.filter(name='大锤')
stus.delete()
return HttpResponse('删除成功')

def up_stu(request):
# 实现更新
# 第一种方式
# stus= Student.objects.filter(name='莫幺儿')
# 获取莫幺儿对象
# stu = stus[0]
# stu = Student.objects.filter(name='小明').first()
# stu.name = '狗屎'
# stu.save()

# 第二种方式
Student.objects.filter(name='胡歌').update(name='莫宇', age=25)
return HttpResponse('更新成功')

进入虚拟环境

  • env/djenv6/Scripts/activate
    • 将代码放到code文件中,从虚拟环境中,进入code文件夹
  • 退出虚拟环境 ——- deactivate

启动一个脚本文件:

  • 第一步:
    • add Configurations —- 修改
      • Name 修改名字
      • Script path 配置虚拟环境
      • Parameters 改成 runserver [ip:][8080]
  • 第二步:
    • 引入Django模块
    • 修改settings中的DATABASE的数据

![img]

在model中创建表格模型

1.在settings中的INSTALLED_APPS中添加app

2.执行python manage.py startapp app

3.执行python manage.py makemiigrations

  • Provide a one-off default now (will be set on all existing rows) ——— 缺少一个默认值

4.再执行python manage.py migrate —- 迁移表格

5.如果报错,查看Django_migrations的表格的最后一行

表格中的操作

  • 添加表格的列(定义字段)都写在models.py中创建的模型(类)中,定义字段,就表示定义这个类的对象的属性,然后执行上面的第三、四步骤就创建好了

  • 创建表格中的数据:

  • 1.url路由

    • 在urls.py —-> urlpatterns中添加一个url(正则表达式,调用views中的方法)
    • 运行程序,查看调用方法生成的ip地址,在数据库中就创建好了数据
  • 2.运行程序

    查看调用方法生成的ip地址,在数据库中就创建好了数据

创建表格中的数据(2)

def create_stu(request):
    Student.objects.create(s_name='小明')
    return HttpResponse('创建成功')

(查)查询数据 :

  • 准确查询

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def sel_stu(request):
    # 实现查询
    # 查询所有的数据
    stus = Student.objects.all()
    # filter() 过滤
    stus = Student.objects.filter(s_name='小明')
    # first()获取第一个
    # last()获取最后一个
    stus = Student.objects.filter(s_age=20).first()
    # get拿不到值和拿到多个值都会报错,filter不会报错,会取到空值
    stus = Student.objects.get(s_age=20)
    # 查询多个条件
    stus = Student.objects.filter(s_age=20).filter(s_gender=1)
    stus = Student.objects.filter(s_age=20, s_gender=1)
    print(stu_names)
    return HttpResponse('查询成功')
  • 模糊查询

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def sel_stu(request):
    # 模糊查询 like '%xxx%' '_xx'
    # 名字中含有'吴'字
    stus = Student.objects.filter(s_name__contains='吴')
    # 以小开头
    stus = Student.objects.filter(s_name__startswith='小')
    # 以小字结尾
    stus = Student.objects.filter(s_name__endswith='小')
    stu_names = [stu.s_name for stu in stus]
    print(stu_names)
    return HttpResponse('查询成功')
  • 其它查询

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    def sel_stu(request):
    # 大于 gt/gte 小于 lt/lte
    stus = Student.objects.filter(s_age__gt=18)
    stus = Student.objects.filter(s_age__lt=18)
    stus = Student.objects.filter(s_age__gte=18)

    # 排序 order_by()
    # 升序
    stus = Student.objects.order_by('id')
    # 降序
    stus = Student.objects.order_by('-id')

    # 查询部满足条件的数据
    stus = Student.objects.exclude(s_age=20)

    # 计数方法count(),len()
    print(len(stus))
    stus_count = stus.count()
    print(stus_count)

    # values()
    stus_values = stus.values()

    # id=pk
    stus = Student.objects.filter(id=2)
    stus = Student.objects.filter(pk=2)

    stu_names = [stu.s_name for stu in stus]
    print(stu_names)
    return HttpResponse('查询成功')