python-django-05

python-django-05

 

1、模板
    1、继承
        1、
            {%block 名称%}
            {%endblock%}

        2、
            {%extends '父模板名称'%}
2、模型-Models
    1、模型
        根据数据库中的表和字段来构建编程语言中的类和属性
    2、创建 和 使用模型
        1、ORM
            Object Relational Mapping
            对象关系映射
        2、数据库的配置
            1、settings.py
                DATABASES = {
                    'default':{
                        'ENGINE':'django.db.backend.mysql',
                        'NAME':'数据库名',
                        'USER':'root',
                        'PASSWORD':'123456',
                        'HOST':'localhost',
                        'PORT':'3306',
                    }
                }
        3、Models的编写
            每个类必须继承自models.Model
            class Entry(models.Model):
                field1 = models.FieldType(**FiledOptions)

                name=models.CharFiled(max_length=30,null=True)
        4、将models同步到数据库
            1、./manage.py makemigrations
                将models类生成为中间的日志文件
            2、./manage.py migrate
                将日志文件映射到数据库
3、数据的导入和导出
    1、版本切换
        ./manage.py migration 应用名 版本号
    2、数据库的导入和导出
        ... ...
    3、通过数据库自动导出Models
        ./manage.py inspectdb > xxx.py
================================================
1、模型的数据库操作方法(CRUD)
    1、通过视图向DB中增加数据
        1、Entry.objects.create(属性=值,属性=值)
        2、创建一个实体对象,并通过 save() 方法完成增加
            obj = Entry(属性=值,属性=值)
            obj.save()
        3、通过字典创建实体对象,再调用 save()
            dic = {
                'name':'xx',
                'age':33,
                'email':''
            }
            obj = Author(**dic)
            obj.save()
    2、查询操作(重难点)
        所有的查询都要在Entry.objects的基础上完成
        1、基本查询操作
            语法:all()
            用法:Entry.objects.all()
            返回:QuerySet
        2、查询接口
            1、all()
                Entry.objects.all()
                相当于:select * from ...
            2、all().values('列名')
                Entry.objects.all().values('name')
                相当于:select name from ...
                作用:查询所有记录的某一列的值
            3、all().values('列1','列2')
                Entry.objects.all().values('name','age')
                相当于:select name,age from ...
            4、get()
                只查找一条记录时使用
                也只能返回一条记录
                如果查询返回多条记录的话,则报错
                Entry.objects.get(id=4)
                相当于:select * from ... where id=4
            5、exclude()
                作用:对给定条件取反
                Entry.objects.exclude(id=3)
                select * from .... where not id=3

                Entry.objects.exclude(id=3,age=35)
                select * from .... where not (id=3 and age=35)
            6、order_by()
                Entry.objects.order_by('列名1','-列名2')
                指定按照字段们进行排序,如果是多个字段,中间,隔开。默认是按照升序排序,需要降序的话,只需要在列名前加‘-’即可
            7、filter()
                根据自定义条件查询结果集,可以是一个,也可以是多个,多个的话,条件用 , 隔开。
                如果是多个条件的话,其内部是使用 AND 来进行条件连接的
                1、使用Entry的属性来作为filter()的条件
                    ex:
                        1、Author.objects.filter(id=1)
                            select * from author where id=1
                        2、Author.objects.filter(name='王宝强')
                        3、Author.objects.filter(id=1,name='王宝强')
                            select * from auther where id=1 and name='王宝强'
                2、使用 Filed Lookups (查询谓词)
                    1、__exact
                        作用:等值判断
                        Author.objects.filter(id__exact=1)
                        SQL:
                            select * from auther where id=1
                    2、子查询
                        inner=Author.objects.filter(name__exact='贾乃亮').values('age')
                        authors=Author.objects.filter(age__gt=inner)
    3、修改操作
        1、修改单个对象
            1、通过get()得到要修改的实体对象
            2、通过实体对象修改属性值
            3、再通过实体对象的save()函数,实现保存

            auth=Author.objects.get(id=1)
            auth.name='宝强.王'
            auth.age=45
            auth.save()
        2、批量修改(修改查询结果集的值)
            调用 update() 函数即可
            Author.objects.all().update(属性=值,...)
    4、删除操作
        1、删除单个对象
            obj=Author.objects.get(id=1)
            obj.delete()
        2、批量删除
            Author.objects.filter(age__lt=50).delete()
    5、F()操作 和 Q()操作
        1、F()操作
            update author set age=age+10
            Author.objects.all().update(age=age+10)

            作用:用于在执行中获取某列的值
            语法:F('列名')

            from django.db.models import F
            Author.objects.all().update(age=F('age')+10)

        2、Q()操作
            AND:Author.objects.filter(id=1,age=35)

            from django.db.models import Q
            Author.objects.filter(
                Q(id__exact=1)|Q(age=35),name=''
            )

            select * from author where id=1 or age=35 and name=''
    6、原生的数据库操作方法
        1、查询
            函数:raw()
            语法:Entry.objects.raw(sql)
        2、增删改
            def sql(request):
                with connection.cursor() as cursor:
                    sql='delete from index_author;'
                    cursor.execute(sql)
                    return render(... ...)

 

posted on 2019-07-23 14:52  微子天明  阅读(107)  评论(0编辑  收藏  举报

导航