Django

  1. 常用的查询
    1. 常用的查询方法
    2. 常用的查询条件
  2. 常用字段映射关系
  3. Field常用参数
  4. 表关系的实现

查用的查询方法

这是需要用到的数据

from django.http import HttpResponse
from .models import User def special_search(request): # 查询所有的记录
res = User.objects.all()
print(res) return HttpResponse('查询成功')

# 查询第一条数据
res = User.objects.first()

# 查询最后一条数据
res = User.objects.last()

# 根据条件查询满足条件的结果
res = User.objects.filter(name='李四')

# 按条件获取排除以后的数据
res = User.objects.exclude(name='周六')

# 获取一个对象
res = User.objects.get(name='王五')

# 对结果进行排序
res = User.objects.order_by('age')

# 多项排序
res = User.objects.order_by('age', 'id')

# 逆向排序
res = User.objects.order_by('-age')

# 将返回的QuerySet数据转换成字典
res = User.objects.all().values()

这里可以发现,多出了city属性,因为

我没有加上__str__的city属性的输出,可以得出结论:

.values()方法可以直接获取模型数据的属性,不需要重定义输出

# 查询数据的总数
res = User.objects.count()

常用的常洵条件

查找对象的条件的意思是传给以上方法的一些参数。相当于是SQL语句中的where语句后面的条件,语法为字段名__规则(是连着连个下划线哦)

# 等于exact  iexact忽略大小写
res = User.objects.filter(name__exact='李四')

# 包含contains icontains 忽略大小写
res = User.objects.filter(name__contains='六')

# 以什么开始 startswith  istartswith忽略大小写
res = User.objects.filter(name__startswith='张')

# 以什么结尾 endswith iendswith忽略大小写
res = User.objects.filter(name__endswith='五')

# 成员所属 in
res = User.objects.filter(age__in=[22, 23, 24])

# gt 大于
res = User.objects.filter(age__gt=22)

# lt 小于
res = User.objects.filter(age__lt=21)

# 大于等于或者小于等于后面加上e
res = User.objects.filter(age__gte=22)

# 区间 range
res = User.objects.filter(age__range=(21, 22))

# isnull 获取数据为空的
res = User.objects.filter(city__isnull=True)
# 获取不为空的数据
print(User.objects.filter(city__isnull=False))

 常用字段映射关系

  • IntegerField : 整型,映射到数据库中的int类型。
  • CharField:  字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。
  • TextField:  文本类型,映射到数据库中的text类型。
  • BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。
  • DateField:  日期类型,没有时间。映射到数据库中是date类型,在使用的时候,可以设置DateField.auto_now每次保存对象时,自动设置该字段为当前时间。设置DateField.auto_now_add当对象第一次被创建时自动设置当前时间。
  • DateTimeField:   日期时间类型。映射到数据库中的是datetime类型, 在使用的时候,传递datetime.datetime()进去。

Field的常用参数

  • primary_key:  指定是否为主键。
  • unique:  指定是否唯一。
  • null:  指定是否为空,默认为False。
  • blank: 等于True时form表单验证时可以为空,默认为False。
  • default:  设置默认值。
  • DateField.auto_now:  每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。
  • DateField.auto_now_add:  第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值

models.py

class Test(models.Model):
name = models.CharField(max_length=10)
age = models.IntegerField()
note = models.TextField()
gender = models.BooleanField(default=True)
create_time = models.DateField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)

创建映射文件并生成数据表

查看数据结构:

我们来添加数据

views:

def test(request):
Test.objects.get_or_create(name='A', age=18, note='I am A', gender=True)
Test.objects.get_or_create(name='B', age=19, note='I am B', gender=False)
return HttpResponse('数据添加成功')

需要注意的一点:update_time,只用通过.save()方法,才能实现更新

现在运行如下代码:

def test(request):
# Test.objects.get_or_create(name='A', age=18, note='I am A', gender=True)
# Test.objects.get_or_create(name='B', age=19, note='I am B', gender=False)
Test.objects.filter(name='A').update(age=20)
res = Test.objects.get(name='B')
res.age = 22
res.save()
return HttpResponse('数据添加成功')

表数据关系

表关系举例

创建学院表:

class Department(models.Model):
d_id = models.AutoField(primary_key=True)
d_name = models.CharField(max_length=10)
def __str__(self):
return 'Department<d_id=%s, d_name=%s>'%(
self.d_id, self.d_name
)

创建学生表,与学院表成一对多,外键关联:

class Student(models.Model):
s_id = models.AutoField(primary_key=True)
s_name = models.CharField(max_length=10)
department = models.ForeignKey('Department', on_delete=models.CASCADE)
def __str__(self):
return 'Student<s_id=%s, s_name=%s>'%(
self.s_id, self.s_name
)

学生详情表,与学生表一对一

class Stu_Detail(models.Model):
s_id = models.OneToOneField('Student', on_delete=models.CASCADE)
age = models.IntegerField()
gender = models.BooleanField(default=True)
city = models.CharField(max_length=30)
def __str__(self):
return 'Stu_Detail<s_id=%s, age=%s, gender=%s, city=%s>'%(
self.s_id, self.age, self.gender, self.city
)

课程表,与学生表成多对多,自动生成三方表

class Course(models.Model):
c_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=10)
student = models.ManyToManyField('Student')
def __str__(self):
return 'Course<c_id=%s, name=%s>'%(
self.c_id, self.name
)

注意:

  • 外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错!
  • 一般使用CASCADE表示级联删除
  • 关于on_delete还有其他的一些属性:
    • on_delete=models.CASCADE==>主表属性删除,相关联的子表属性会一并删除  (推荐)
    • on_delete=models.SET_NULL, null=True ==>主表属性删除,相关联的字表属性会变成NULL
    • on_delete=models.PROTECT==>有关联的时候,不允许删除,否则会报错

执行完makemigrations和migrate的命令后,在数据库我们能看到5张表,其中多对多关系的ManyToManyField
方法自动生成了关系表.

Django——7 常用的查询 常用的模型字段类型 Field的常用参数 表关系的实现的更多相关文章

  1. Django文档——Model字段类型(Field Types)

    大部分内容参考自http://wrongwaycn.github.io/django11/topics/db/models/index.html#topics-db-models ,内容是django ...

  2. django字段类型(Field types)介绍

    字段类型(Field types) AutoField 它是一个根据 ID 自增长的 IntegerField 字段.通常,你不必直接使用该字段.如果你没在别的字段上指定主 键,Django 就会自动 ...

  3. MySQL 常用字段类型,介绍及其建表使用方法经验分享

    由于工作的公司没有专业的DBA又经常需要建立各种各种的表来满足自己的业务逻辑,所以经常查看MySQL 手册或者谷歌查看相关资料,所以本人就根据我的工作经验和相关资料来介绍一下MySQL各种字段类型及其 ...

  4. linq查询结果转换为指定字段类型的list集合

    转换查询结果为ProductId字段的类型的list集合 (from s in _db.Mobile_TeamAction || s.ActionStatus == select new { s.Pr ...

  5. ef codefirst 模型字段类型与sqlserver表字段类型对应概要

    1.sqlserver中nvarchar(50),对应EF中: [MaxLength(, ErrorMessage = "最大长度为{1}")] public string Nam ...

  6. 八.django模型系统(二)之常用查询及表关系的实现

    Ⅰ.常用查询  1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...

  7. Django入门--模型系统(二):常用查询及表关系的实现

    1.常用查询 模型类上的管理器: ** 模型类.objects ** (1)常用一般查询 rs = Student.objects.all() # 查询所有记录,返回Queryset print(rs ...

  8. Django框架基础知识07-常用查询及表关系的实现

    1.常用的模型字段类型 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 官方文档:http ...

  9. Django ormmodel模型字段参考文章

    Model 字段参考 (Model field reference)¶ 本文档包含所有 字段选项 (field options) 的内部细节和 Django 已经提供的 field types . 参 ...

随机推荐

  1. Kaggle "Microsoft Malware Classification Challenge"——就是沙箱恶意文件识别,有 Opcode n-gram特征 ASM文件图像纹理特征 还有基于图聚类方法

    使用图聚类方法:Malware Classification using Graph Clustering 见 https://github.com/rahulp0491/Malware-Classi ...

  2. caffe to tensorflow alexnet model

    from kaffe.tensorflow import Network class AlexNet(Network): def setup(self): (self.feed('data') .co ...

  3. Java 下的函数对象

    1. 举例 如我们要创建一个对大小写敏感的,按照字母序排序的 Set,我们需要向 Set 的构造器传入 String.CASE_INSENTIVE_ORDER 的比较器: Set<String& ...

  4. bzoj 1022 小约翰的游戏John

    题目大意: n堆石子,两个人轮流取石子,每个人取的时候,可以随意选择一堆石子 在这堆石子中取走任意多的石子,但不能一粒石子也不取,取到最后一粒石子的人算输 思路: 首先当每堆石子数都为1时,偶数为先手 ...

  5. [POJ 1386] Play on Words

    [题目链接] http://poj.org/problem?id=1386 [算法] 将每个单词的首字母向尾字母连一条有向边,判断欧拉路径是否存在,即可 [代码] #include <algor ...

  6. Dice (HDU 4652)

    题面: m 面骰子,求1. 出现n个连续相同的停止 ;2. 出现n个连续不同的停止的期望次数.(n, m ≤ 10^6 ) 解析: 当然要先列式子啦. 用f[i](g[i])表示出现i个连续相同(不相 ...

  7. codeforces round #414 div1+div2

    A:判断一下就可以了 #include<bits/stdc++.h> using namespace std; typedef long long ll; int a, b, c, n; ...

  8. RegisterAttached 两种绑定方式

    RegisterAttached 含义:使用指定的属性名称.属性类型和所有者类型注册附加属性 绑定方式:C#绑定.WPF绑定 例:需求DataViewModel为DataView的VM层,在DataV ...

  9. codevs1036商务旅行(LCA)

    1036 商务旅行  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 某首都城市的商人要经常到各城镇去做 ...

  10. 【洛谷4770/UOJ395】[NOI2018]你的名字(后缀数组_线段树合并)

    题目: 洛谷4770 UOJ395 分析: 一个很好的SAM应用题-- 一句话题意:给定一个字符串\(S\).每次询问给定字符串\(T\)和两个整数\(l\).\(r\),求\(T\)有多少个本质不同 ...