zoukankan      html  css  js  c++  java
  • 多表操作


    昨日回顾:
    1 模板导入
    -写一个模板
    -{%include '模板名字'%}
    2 母版继承
    -写一个母版(留几个盒子),名字叫XX
    -{% block 名字 %}
    {%endblock%}
    -使用:继承母版
    -{%extends 'XX'%}
    -重写盒子(多个盒子,位置无关)
    -{% block 名字 %}
    写内容
    {%endblock%}
    3 静态文件相关
    方式一
    -先创建一个static的文件夹
    -settings配置静态文件
    -STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static')
    ]
    - <link rel="stylesheet" href="/static/utils/bootstrap-3.3.7-dist/css/bootstrap.css">
    -<script src="/static/utils/bootstrap-3.3.7-dist/js/bootstrap.js"></script>
    方式二(动态)
    -使用:{%load static%}
    -<script src="{% static 'utils/bootstrap-3.3.7-dist/js/bootstrap.js'%}"></script>
    方式三:
    -使用:{%load static%}
    -<script src="{% get_static_prefix %}css/mycss.css"></script>

    4 单表操作:
    -mysql数据库:settings里配置
    'default': {
    # key值必须都是大写
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'day76',
    'HOST':'127.0.0.1',
    'PORT':3306,
    'USER':'root',
    'PASSWORD':'admin',
    }
    -在init文件中:
    import pymysql
    pymysql.install_as_MySQLdb()
    -在models中,写类,写类的属性
    #自增,int,主键
    id = models.AutoField(primary_key=True)
    #varchar,长度32
    name = models.CharField(max_length=32)
    #Decimal 长度5,小数位2位
    price = models.DecimalField(max_digits=5, decimal_places=2)
    #日期类型,可以为空
    create_data=models.DateField(null=True)
    -数据库迁移:
    python3 manage.py makemigrations --->只是对数据变更,做记录
    python3 manage.py migrate ---->把变更,同步到数据库
    -新增表,删除表,新增字段,删除字段---->执行数据库迁移的两条命令就可以了
    -单表增:
    -两种方式
    -单表修改:
    -先查询出来,然后update(queryset对象的方法)
    -对象要更新,用save方法
    -单表删除:
    -先查询出来,然后delete(queryset对象和模型对象的方法)
    *****用queryset删除,修改的时候,一定要注意,数据是几条
    -删除数据表中所有数据:Book.objece.all().delete()
    -单表查询
    -all()
    -filter(**kwargs)
    -get(**kwargs) 有且只有一条数据
    -exclude(**kwargs)
    -order_by(*field)
    -reverse()
    -count()
    -first()
    -last()
    -exists()
    -values(*field)
    -values_list(*field)
    -distinct()
    -单表基于双下划线模糊查询
    Book.objects.filter(price__in=[100,200,300])
    Book.objects.filter(price__gt=100)
    Book.objects.filter(price__lt=100)
    Book.objects.filter(price__gte=100)
    Book.objects.filter(price__lte=100)
    Book.objects.filter(price__range=[100,200])
    Book.objects.filter(title__contains="python")---->%python%
    Book.objects.filter(title__endswith="py")----->%py
    Book.objects.filter(title__startswith="py")---->py%
    Book.objects.filter(title__icontains="python")--->忽略大小写
    Book.objects.filter(pub_date__year=2012,pub_date__month=12)

    今日内容:
    1 创建多表模型(详情见代码)
    #用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id
    # ManyToManyField会自动创建第三张表
    # *************重点
    # 一对一的关系:OneToOneField
    # 一对多的关系:ForeignKey
    # 多对多的关系:ManyToManyField

    2 添加表记录
    1 一对多新增
    -两种方式:
    -publish=对象
    -publish_id=id
    2 一对多删除:同单表删除
    3 一对多修改:两种方式,可以传对象,可以传id
    4 一对一跟一对多一样
    5 多对多:
    -add ----->可以传对象,可以传id,可以传多个
    -remove ----->可以传对象,可以传id,可以传多个
    -clear ---->没有参数
    -set ----->跟上面不一样,必须传列表,列表里面可以是对象,可以是id
    3 基于对象的跨表查询
    1 一对一
    正向:正向查询按字段
    反向:反向查询按表名小写
    2 一对多
    正向:正向查询按字段
    反向:反向按表名小写_set.all()
    3 多对多
    正向:正向查询按字段.all()
    反向查询:反向按表名小写_set.all()
    4******基于对象的查询,多次查询(子查询)


    4 基于双下划线的跨表查询
    -连表查询
    -一对一双下划线查询
    -正向:按字段,跨表可以在filter,也可以在values中
    -反向:按表名小写,跨表可以在filter,也可以在values中



    作业:
    1 图书馆的表模型创建好,插入一些数据
    2 基于对象的查询
    3 基于双下划线的查询




  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/fushaunglin/p/10033455.html
Copyright © 2011-2022 走看看