简介 目录 评价 推荐
  • legend达 2022-03-17

    q 对象感觉会用到。

    f 对象感觉用不到。

    0赞 · 0采集
  • legend达 2022-03-17

    这节看看就好。感觉暂时用不到

    0赞 · 0采集
  • legend达 2022-03-17

    不返回QUERY SET


    一类是create, update, delete, exist 这种。按行为目的就不需要返回数据的。


    一类是 返回的不是tuple,比如 count(), max() 这些。


    另一类是 get(), first(), last(), get_or_create(), 这些返回的model object, 而不是query set. 我的理解就是他们是返回model对象本身,就不用queryset

    0赞 · 0采集
  • legend达 2022-03-17

    这节未来回头多看看。讲了各种sql语句的orm写法。和Join查询的写法。


    提到个叫prefetch的东西。回头研究下文档


    queryset我的理解就是SQL returned result的python里对应的一个表现类。

    0赞 · 0采集
  • legend达 2022-03-17

    对于某个字段可以适用枚举类。写法是:


    charfield(choices=( (1,"free"),(2,"basic"),(3,"premium")    ), default = 0)


    1 to 1关系的外键用

    teacher_id = models.OneToOneField()


    django做migration时会自动生成多对多的关系表

    0赞 · 0采集
  • legend达 2022-03-17

    meta:

    关于数据库,数据表的一些数据。比如表名,整个表按某个字段排序,

    设置permission权限, 设置 unique constrain,设置verbose name 就是人类可读的信息,


    verbose_name是在DJ admin 界面会显示的信息

    0赞 · 0采集
  • legend达 2022-03-17

    自关联例子:

    有个address table, 里面同时存的是省,市,区信息。要想找到某个省有哪些市,就在本表自查。有个用于关联的字段相当于是forgin key, 叫pid, 就是自己的parent的 pk

    0赞 · 0采集
  • legend达 2022-03-17

    field参数。

    一下这些是大部分字段类型都有的共有参数

    db_column是=表中实际的column的名字

    primary_key=true  可以指定pk

    unique=true  该属性值唯一

    null=True DB里允许null

    blank= True 前端的form里提这个field交时可以为空

    db_index = true, 对该属性加index

    help_text = 'xxxx', 表单里显示help message

    editable= false/trure, 默认是false; true的话这个添加进db后就无法被修改了

    verbose_name=


    一下这些是某些field type才有的

    Charfield

    max_length, 就是varchar的最大长度

    Datefield

    unique_for_date=true, 就是日期要唯一

    auto_now_add=true, 自动记录插入时间

    auto_now=true, 自动记录更新时间

    FloatField

    max_digits =3 ,

    decimal_places =2 ,


    一下是关系型field的参数

    on_delete=, 这个表示当关联的表里的记录被删了,该采取什么措施。比如学生表里有tutor_id, 结果tutor表删了一些tutor数据。 那么这些tutor的学生的记录改一起删除呢,还是阻止删除有学生的tutor呢,还是设置tutor_id为null?

    这个就是on_delete去定义。


    0赞 · 0采集
  • legend达 2022-03-16

    导入数据方式:

    * run sql script

    * python脚本。脚本里就是用python django rom去写一些数据创建的语句。

    * manage.py loadata xxx.json 

    0赞 · 0采集
  • legend达 2022-03-16

    这一节讲了makemigration和migrate这2命令后,django做了什么。


    另外提到了如果要删除某个table,除了db里直接删,django代码里删掉相关的model, 和migrations/下面的文件。还要删除数据库里django.migrations的记录

    0赞 · 0采集
  • legend达 2022-03-16

    本节列举了DJANGO ORM中的各种数据类型的field怎么写

    0赞 · 0采集
  • qq_慕设计7243444 2022-03-15
    1. 一对一:a = models.OnetoOnefiled()

    2. 一对多:a = models.foreignkey()

    3. 多对多:a = models.manytomanyfiled()

    0赞 · 0采集
  • ymzy 2021-11-26

    https://github.com/liaogx/imooc

    0赞 · 0采集
  • pipple 2021-10-23

    get_or_create(主键-唯一字段,default={})

    主键写在外面

    0赞 · 0采集
  • pipple 2021-10-23

    obj.filter.select_realted('字段名')

    一对一优化


    obj.filter.prefetch_related('字段名')

    多对多优化

    0赞 · 0采集
  • pipple 2021-10-23

    MySQL 只支持并集查询

    0赞 · 0采集
  • pipple 2021-10-23

    obj.values   元组含对象名称

    obj.values_list   只含内容

    obj.values_list flat=true  (单个)

    0赞 · 0采集
  • pipple 2021-10-23

    反向排序 ,需要在Meta 中设置ordering = ['字段名']

    0赞 · 0采集
  • pipple 2021-10-23

    查看原生sql

    Teacher.objects.filter(fans__gte=500).order_by('nickname')

    str(xxx.query)

    0赞 · 0采集
  • pipple 2021-10-23

    字段双下划线,匹配条件

    0赞 · 0采集
  • pipple 2021-10-23

    objects.get   返回模型列


    filter 返回 query set

    0赞 · 0采集
  • pipple 2021-10-23

    批量导入数据 2:00

    0赞 · 0采集
  • 慕哥7465560 2021-07-18

    from django.shortcuts import render
    from django.views.generic import View
    from .models import *


    def course_view(request):
       # 1.查询、检索、过滤
       teachers = Teacher.objects.all()
       print(teachers)  # 返回查询集
       # <QuerySet [<Teacher: Teacher object (holy)>, <Teacher: Teacher object (Jack)>, <Teacher: Teacher object (Allen)>]>

       teacher1 = Teacher.objects.get(nickname='Jack')  # 返回一条结果
       print(teacher1, type(teacher1))
       # Teacher object (Jack) <class 'course.models.Teacher'>

       teacher2 = Teacher.objects.filter(fans__gte=500)  # QuerySet 可以是多条结果
       for t in teacher2:
           print(f'讲师姓名{t.nickname}--粉丝数{t.fans}')
           # 讲师姓名Jack--粉丝数666
           # 讲师姓名Henry--粉丝数899

       # 2. 字段字符匹配,大小写敏感
       teacher3 = Teacher.objects.filter(fans__in=[666, 1200])
       print(teacher3)
       # <QuerySet [<Teacher: Teacher object (Jack)>]>

       teacher4 = Teacher.objects.filter(nickname__icontains='A')
       print(teacher4)
       # <QuerySet [<Teacher: Teacher object (Jack)>, <Teacher: Teacher object (Allen)>]>

       # 3.结果切片、排序、链式查询
       print(Teacher.objects.all()[:1])

       teacher5 = Teacher.objects.all().order_by('-fans')
       for teacher in teacher5:
           print(teacher.nickname, teacher.fans)
           # Henry 899
           # Jack 666
           # Allen 123
           # holy 0
       print(Teacher.objects.filter(fans__gte=500).order_by('nickname'))
       # <QuerySet [<Teacher: Teacher object (Henry)>, <Teacher: Teacher object (Jack)>]>

       # 4. 查看执行的原生SQL     str(xx.query)
       print(str(Teacher.objects.all().query))
       # SELECT "course_teacher"."nickname", "course_teacher"."introduction",
       #    "course_teacher"."fans", "course_teacher"."created_at", "course_teacher"."updated_at" FROM "course_teacher"

       return render(request, 'course.html')

    1赞 · 1采集
  • 慕哥7465560 2021-07-17

    所有字段都有的属性值

    help_text: 在表单中显示帮助信息的参数

    db_index: 为当前字段建立索引, 默认为False

    null/blank: 字段是否可以为空, null约束数据库层面, blank约束前端表单提交时是否为空

    unique: 唯一性约束, 默认为False

    verbose_name: 设置字段别名(或备注)

    primary_key: 设置当前字段是否为主键, 默认为False

    db_column: 设置当前字段的名称,在数据库中表的名称

    editable: 是否可以编辑, 默认为False

    属于个别字段的参数

    max_length[CharField]:最大长度

    unique_for_date[DateField]: 字段日期必须唯一

    unique_for_month[DateField]:月份唯一

    auto_now[DateField]: 修改记录时是否自动更新当前日期

    auto_now_add[DateField]: 添加记录时是否自动设置当前日志

    max_digits[DecimalField]: 总共有多少位

    decimal_places[DecimalField]: 小数点后数字的个数

    关系型字段的参数

    CASCADE: 模拟SQL语言中的ON DELETE CASCADE约束,将定义有外键的模型对象同时删除(该操作为当前Django版本的默认操作)

    PROTECT: 阻止上面的删除操作, 弹出ProtectedError异常

    SET_NULL: 将外键字段设为null, 只有当字段设置了null=True时, 方可使用该值

    SET_DEFAULT: 将外键字段设为默认值, 只有当字段设置了default参数时,方可使用

    DO_NOTHING: 什么也不做

    SET(): 设置为一个传递给SET()的值或者一个回调函数的返回值, 注意大小写


    related_name: 外键关联中的反向查询,由父表查询子表的信息

    on_delete: 当一个被外键关联的对象被删除时,Django将模仿on_delete参数定义的SQL约束执行相应操作


    0赞 · 0采集
  • howd 2021-07-15

    类=数据表,对象=数据行,属性=字段

    0赞 · 0采集
  • 请叫我滚去写代码 2021-06-29

    Student.object.all().exclude(nickname='A') :不包括

    Student.object.all().reverse()对结果集反向排序:需要在Meta中先ordering

    Student.object.all().distinct():对结果集去重


    Student.object.all().extra(select={"name": "nickname"})  对结果集中的nickname字段起一个name的别名

    Student.object.all().only('nickname', 'age') 对结果集中的字段做选择,只显示选择的字段

    Student.object.all().defer('nickname')  和only相反,排除一些字段

    Student.object.values('nickname', 'hobby') 返回结果是QuerySet的列表嵌套一个个字典

    Student.object.values_list('nickname', hobby')返回结果是QuerySet的列表嵌套一个个组

    Student.object.values_list('nickname', flag=True) 当values_list只有一个字段时使用flag=True,可以将返回的结果QuerySet直接放在列表里,没有嵌套


    Course.objects.dates('created_at', 'month', order='DESC') 返回以字段created_at的月份(去重后)降序的结果集(year, month, day)

    Course.objects.datetimes('created_at', 'munite', order='DESC') 返回以字段created_at的分钟(去重后)降序的结果集(year, month, day, hour, munite, second)


    union()并集   intersection()交集   difference()差集

    p1 = Course.objects.filter(price__gte=240)

    p2 = Course.objects.filter(price__lte=240)

    p1.union(p2)

    p1.intersection(p2)

    p1.difference(p2)


    通过子表查父表(外键都设置在子表中)

    select_related() 一对一,多对一查询优化(查询子表的时候一次将父表的信息也查出来)

    courses = Course.objects.all().select_related('teacher')  原生的SQL语句会变的很少

    for c in courses:

           print(f"{c.title}--{c.teacher.nickname}")


    prefetch_related() 一对多,多对多查询优化

    students = Students.objects.filter(age__lt=30).prefetch_related('course')

    for s in students:

            print(s.course.all())


    通过父表查子表(外键都设置在子表中):反向查询

    Teacher.objects.get(nickname='Jack').course_set.all()  通过父表Teacher查Course,需要小写类名_set获取子表的信息

    如果子表的外键中设置有属性related_name='relate' 可以使用下面的方法替代course_set

    Teacher.objects.get(nickname='Jack').relate.all()


    annotate() 使用聚合计数,Count, Sum, Avg, Max, Min

    annotate(vol=Sum('valume'))  annotate(别名=Sum('字段名'))

    Course.objects.values('teacher').annotate(vol=Sum('valume'))

    Course.objects.values('teacher').annotate(pri=Sum('price'))

    2赞 · 1采集
  • 请叫我滚去写代码 2021-06-29

    query来显示原生的sql语句

    0赞 · 0采集
  • 微枫 2021-01-21

    配置url路由。

    http://img3.mukewang.com/60092720000191c019680976.jpg

    0赞 · 0采集
  • 微枫 2021-01-21

    定义视图类和函数。

    http://img3.mukewang.com/600926ea0001404316940872.jpg

    0赞 · 0采集
  • 微枫 2021-01-21

    定义模型和字段。

    http://img1.mukewang.com/600926bc00014a5217340966.jpg

    0赞 · 0采集
数据加载中...
开始学习 免费