zoukankan      html  css  js  c++  java
  • django ORM


    一、对数据库进行操作
    首先需要导入models
    from mytest.models import User

    1.增-向User表中增加对象:
    (1)User.objects.create(name="m",age=99)
    (2)p= User(name="m", age=99)
    p.save()
    (3)p = User(name="m")
    p.age = 9
    p.save()
    (4)Person.objects.get_or_create(name="m", age=9)
    '''
    这种方法是防止重复很好的方法,但是速度要相对慢些,
    返回一个元组,第一个为Person对象,第二个为True或False,
    新建时返回的是True, 已经存在时返回False.
    '''
    2.查-获取对象
    #all
    User.objects.all()#获取对象不止一个返回值类型为QuerySet
    User.objects.all[5:10]#切片操作,获取索引5-10
    #get
    User.objects.get(name=name)#获取一个对象
    #filter
    User.objects.filter(name="abc")
    # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
    User.objects.filter(name__iexact="abc")
    # 名称为 abc 但是不区分大小写
    User.obojects.filter(name__contains="abc")
    #name中含有abc的对象
    User.obojects.filter(name__icontains="abc")
    #name中含有abc,不区分大小写
    User.ocjects.filter(name__regix="^abc")
    #正则表达式查询
    User.objects.filter(name__iregix="^abc")
    #正则表达式查询且不分大小写
    #exclude
    User.objects.exclude(name__contains="abc")
    #排除name中含有abc的User对象
    User.objects.filter(name__contais="abc").exclude("23")
    #name中含有abc的,但是排除age为23的
    #order_by
    User.objects.order_by("name","-age")#按照name排序,若name相同按age倒序
    User.objects.order_by("?name")#按照name随机排序
    #aggreate
    使用aggregate()过滤器调用聚合函数,返回单个对象
    聚合函数包括:Avg,Max,Min,Sum,Count
    使用Count时,一般不需要 aggregate()过滤器,直接调用即可
    被定义在django.db.models中
    3.删
    #获取到对象后通过‘.delete()’删除
    4.改
    #获取到对象后通过‘.’找到其属性直接修改,再'.save()'
    #也可以直接.update(name=name)
    ------------------------------------------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------------------------------------
    #常用字段类型
    V=models.CharField(max_length=None[, **options])    #varchar
    V=models.EmailField([max_length=75, **options])    #varchar
    V=models.URLField([verify_exists=True, max_length=200, **options])    #varchar
    V=models.FileField(upload_to=None[, max_length=100, **options])    #varchar
    #upload_to指定保存目录可带格式,
    V=models.ImageField(upload_to=None[, height_field=None, width_field=None, max_length=100, **options])
    V=models.IPAddressField([**options])    #varchar
    V=models.FilePathField(path=None[, match=None, recursive=False, max_length=100, **options]) #varchar
    V=models.SlugField([max_length=50, **options])    #varchar,标签,内含索引
    V=models.CommaSeparatedIntegerField(max_length=None[, **options])    #varchar
    V=models.IntegerField([**options])    #int
    V=models.PositiveIntegerField([**options])    #int 正整数
    V=models.SmallIntegerField([**options])    #smallint
    V=models.PositiveSmallIntegerField([**options])    #smallint 正整数
    V=models.AutoField(**options)    #int;在Django代码内是自增
    V=models.DecimalField(max_digits=None, decimal_places=None[, **options])    #decimal
    V=models.FloatField([**options])    #real
    V=models.BooleanField(**options)    #boolean或bit
    V=models.NullBooleanField([**options])    #bit字段上可以设置上null值
    V=models.DateField([auto_now=False, auto_now_add=False, **options])    #date
    #auto_now最后修改记录的日期;auto_now_add添加记录的日期
    V=models.DateTimeField([auto_now=False, auto_now_add=False, **options])    #datetime
    V=models.TimeField([auto_now=False, auto_now_add=False, **options])    #time
    V=models.TextField([**options])    #text
    V=models.XMLField(schema_path=None[, **options])    #text
    --------------------------------------------------------------------------------------------------------
    #关系字段类型
    V=models.ForeignKey(othermodel[, **options])    #外键,关联其它模型,创建关联索引
    V=models.ManyToManyField(othermodel[, **options])    #多对多,关联其它模型,创建关联表
    V=models.OneToOneField(othermodel[, parent_link=False, **options])    #一对一,字段关联表属性

    -----------------------------------------------------------------------------------------------------------------------
    #字段选项
    null:如果为True,表示允许为空,默认值是False

    blank:如果为True,则该字段允许为空白,默认值是False????

    对比:null是数据库范畴的概念,blank是表单验证范畴的

    db_column:字段的名称,如果未指定,则使用属性的名称(只限于数据库表中的名字,操作数据库还是类属性的名字)


    db_index:若值为True, 则在表中会为此字段创建索引,默认值是False(为了优化查询速度 )


    default:默认值,这可以是值或可调用对象。如果可调用,则每次创建新对象时都会调用它。

    primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用

    unique:如果为True, 这个字段在表中必须有唯一值,这个值不能重复,默认值是False

    关系型字段类型:关联表中使用


    -------------------------------------------------------------------------

    #filter/exclude参数
    __exact 精确等于 like 'aaa'
    __iexact 精确等于 忽略大小写 ilike 'aaa'
    __contains 包含 like '%aaa%'
    __icontains 包含 忽略大小写 ilike '%aaa%',
    __gt 大于
    __gte 大于等于
    __lt 小于
    __lte 小于等于
    __in 存在于一个list范围内
    __startswith 以...开头
    __istartswith 以...开头 忽略大小写
    __endswith 以...结尾
    __iendswith 以...结尾,忽略大小写
    __range 在...范围内
    __year 日期字段的年份
    __month 日期字段的月份
    __day 日期字段的日
    __isnull=True/False
    ------------------------------------------------------------------------
    #元选项
    db_table = 'xxx'
    修改表名为xxx

    ordering = 'xxx'
    按照指定字段xxx排序

    verbose_name = 'xxx'
    给模型类指定一个直观可读的信息xxx

    verbose_name_plural = verbose_name
    设置verbose_name的复数

    abstract = True
    设置模型类为一个基类

    permissions = (('定义好的权限', '权限说明'),)
    给数据库的表设置额外的权限

    managed = False
    是否按照django既定的规则来管理模型类

    unique_together = ('address', 'note')
    联合唯一键,约束

    app_label = 'xxx'
    定义模型类属于哪一个应用

    db_tablespace
    定义数据库表空间的名字


    ---------------------------------------------------------------------------
    #manager
    #默认情况下,Django为model 添加的manager的名字为objects。
    ----------------------------------------
    F和Q对象

  • 相关阅读:
    bzoj3028食物 关于(1+x+x^2+x^3+x^4+...)^k的第i项系数就是c(i+k−1,k−1)的证明
    一个好玩的题--倒水
    HDU4372(第一类斯特林数)
    MySQL常用基本语句
    腾讯windows客户端一面
    腾讯PC客户端开发方向一面
    LeetCode数据库175
    Intern Day47
    Intern Day46
    Intern Day46
  • 原文地址:https://www.cnblogs.com/mznsndy/p/11314265.html
Copyright © 2011-2022 走看看