zoukankan      html  css  js  c++  java
  • Django ORM

    Django :orm操作

    常用字段

    AutoField自增字段 primary- key=True 变成主键
    IntegerField
    整形10位 -2147483648 ~ 2147483647.
    CharField
    字符串
    varchar max .length 必填参数
    DateField
    DatetimeField
    	# auto_ now_ add=True 新增数据时自动保存当前的时间
    	# auto_now=True 新增和编辑数据时自动保存当前的时间
    Booleanfield布尔类型
    TextField
    大文本
    FloatField 
    浮点型
    DecimalField 10进制小数 # 999. 99
    	# max digits, 小数总长度 5
    	# decimal places,小数位长度2
    
    
    

    自定义字段

    class myCharField(models .Fie1d):
    自定义的char类型的字段类
    def  __init__ (se1f, max. _length, *args, **kwargs):
    se1f .max_ length = max _length
    super(MyCharField, se1f)._ init_ _(max. .1ength=max _length, *args, **kwargs)
    def db_ type(self, connection): 
    限定生成数据库表的字段类型为char,长度为max length指定的值
    return 'char(%s)' % self .max. .length
    
    

    自定义字段的使用

    phone = MyCharField(max_length=11)
    

    ![]LB5LYT4{GUA%L($}7}AD](D:old_boys28萌新day50 框架笔记~]LB5LY~T4{GUA%L($}7}AD.png)

    字段参数

    null = True # 字段可以为空
    blank = True  允许用户输入为空
    db_column = '数据库中的列名'
    default = 默认值
    db_index = 建立索引
    unique = 唯一约束
    verbose_name = 显示的一个字段名
    choices 给用户的选择 
    
    

    使用django的admin

    ​ 1。创建一个超级用户

    python manage.py creatsupuser
    

    2.在app下的admin注册models

    from app_1 import models
    # Register your models here.
    admin.site.register(models.Person)
    

    3.登录 127.0.0.1:ROST /admin

    ​ 输入超级用户的账户密码 进行管理

    表的参数

    class Meta:
            # 数据库生成的表名称 默认app名称 + _下划线 + 类名
            db_table = 'person'
    
            # admin中显示的表名称
            verbose_name='个人信息'
    
            # 联合索引
            index_together=(
                ('name','age'), # 应为两个存在的字段
            )
    
            # 联合唯一索引
            unique_together = (
                ('name','age'), # 应为两个存在的字段
            )
    

    Django

    orm 双下划线

    类似于魔法方法

    # ret = models.Person.objects.filter(pid__It=6 )
    # # 字段_条件 = less then 小于
    #
    # ret = models.Person.objects.filter(pid__gt=6)
    # # 字段_条件  greater than 大于
    #
    # ret = models.Person.objects/filter(pid__Ite=6)
    # #  字段_条件  less then equal 小于等于
    #
    # ret = models.Person.objects/filter(pid__gte=6)
    # #  字段_条件  great then equal 大于等于
    #
    # ret = models.Person.objects.filter(pid__range=[1,6])
    # #  字段_条件  range 包含左右
    
    # ret = models.Person.objects.filter(pid__in=[1,5,6])
    # # 成员判断
    
    # ret = models.Person.objects.filter(name__contains='alex')
    # 相当于数据库like写法
    
    # ret = models.Person.objects.filter(name__icontains='alex')
    # like ignore 忽略 忽略大小写
    
    # ret = models.Person.objects.filter(name__startswith='a')
    # 以什么开头
    # ret = models.Person.objects.filter(name__istartswith='a')
    # # 以什么开头 忽略大小写
    #
    # ret = models.Person.objects.filter(name__endswith='a')
    # # 以什么结尾
    # ret = models.Person.objects.filter(name__iendswith='a')
    # # 以什么结尾 忽略大小写
    #
    # ret = models.Person.objects.filter(birth__year='2020')
    # # 2020
    # # ret = models.Person.objects.filter(birth__month='1')
    # # ret = models.Person.objects.filter(birth__day='21')
    #
    # ret = models.Person.objects.filter(birth__contarins='2019-01-21')
    #
    # ret = models.Person.objects.filter(name__isnull=True)
    # # 取name为空的数据
    #
    # ret = models.Person.objects.filter(name__isnull=False)
    
    # print(ret)
    
    
    
    import os
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','day50_1.settings')
    import django
    django.setup()
    from app_1 import models
    
    # 正向查询
    book_obj = models.Book.objects.get(pk=1)
    # 基于对象查询
    
    print(book_obj.pub)
    # 关联的出版社对象
    
    print(book_obj.pub_id)
    # 关联出版社的id
    
    
    # 反向查询
    pub_obj = models.Publisher.objects.get(pk=1)
    
    print(pub_obj)
    print(pub_obj.book_set,type(pub_obj.book_set))
    # 类名小写_set  关系管理对象
    print(pub_obj.book_set.all())
    
    # 指定related_name='book' 没有类名小写_set的写法
    
    print(pub_obj.book_set.all())
    
    # 基于字段的查询
    ret = models.Book.objects.filter(name='XXX')
    # 查询关于XXX的一条信息
    
    ret = models.Book.objects.filter(pub__name='XXX')
    # 直接查询关于指定外键的XXX信息
    
    ret = models.Book.objects.filter(pub__name__contains='XXX')
    # 查询包含某外键包含XXX的信息
    
    ret = models.Publisher.objects.filter(name='XXX')
    
    
    ret = models.Publisher.objects.filter(book_name='XXX')
    # 不指定related_name='books' 类名小写
    
    print(ret)
    
    
    # 第一个__表示可以跨到另一张表__前是外键
    
    ret = models.Publisher.objects.filter(book_name='XXX')
    # 指定related_query_name='book'
    

    必知必会13条

    
    # all 查询所有的数据  QuerySet  对象列表  【对象,对象 】
    ret = models.Person.objects.all()
    
    # get  获取一个有且唯一的数据  对象   没有或者多个就报错
    ret = models.Person.objects.get(pk=1)
    
    # filter  获取满足条件的数据  对象列表  【对象,对象 】
    ret = models.Person.objects.filter(pk=1)
    
    # exclude  获取不满足条件的数据  对象列表  【对象,对象 】
    ret = models.Person.objects.exclude(pk=1)
    
    # order_by 排序 默认升序  字段前加- 降序排序 多字段排序
    ret = models.Person.objects.all().order_by('-age','-pid')
    
    # reverse  对已经排序的对象列表进行翻转
    ret = models.Person.objects.all().order_by('pid').reverse()
    
    # values 不指定字段 获取数据所有的字段名和值  QuerySet   [ {},{} ]
    # 指定字段 获取数据指定的字段名和值  QuerySet
    ret = models.Person.objects.all().values('pid','name')
    
    
    # values_list 不指定字段 获取数据所有的值  QuerySet   [ (),() ]
    # 指定字段 获取数据指定字段的值  QuerySet
    ret = models.Person.objects.all().values_list('name','pid')
    
    #  distinct 去重
    ret = models.Person.objects.values('age').distinct()
    
    # count 计数
    ret = models.Person.objects.all().count()
    
    # first 获取第一个元素
    ret = models.Person.objects.all().first()
    
    # last 获取最后一个元素
    ret = models.Person.objects.all().last()
    
    # exists  判断是否有结果
    ret = models.Person.objects.filter(pk=10).exists()
    
    
    
    
  • 相关阅读:
    Android学习笔记_10_ContentProvider内容提供者的使用
    Android学习笔记_9_SQLiteOpenHelper对象之数据库增删改查以及事务回滚操作
    Android学习笔记_8_使用SharedPreferences存储数据
    Android学习笔记_7_使用 sax 或者 dom 或者 pull 解析XML文件
    Android学习笔记_6_保存文件到SDCard
    java GZIP 压缩数据
    struts2 实现文件下载方法汇总
    javascript ActiveXObject FileSystemObject 对象,创建、复制、删除、读取文件等
    css块元素的 display 属性 inline-block 的应用
    javascript操作Date对象
  • 原文地址:https://www.cnblogs.com/Gin1/p/14312639.html
Copyright © 2011-2022 走看看