web开发学习(8) - Model对象基本操作

参考:《Django文档》https://docs.djangoproject.com/zh-hans/2.1/topics/db/models/

1. 字段

字段类型:CharField、TextField、DateField、DateTimeField、IntegerField、BooleanField

字段参数:models.CharField("verbos_name", null=ture, blank=true, default="value_default", primary_key=true,)

2. 模型对象的基本操作

参考:https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/#lookups-that-span-relationships

在Django中,用一个Model类来表示数据库中的一张表,而用该类的实例对象来表示表中的某一条特定记录。

(1) 创建记录(create objects)

b=my_model(name=‘张三’)   #创建
b.save()                 #保存

b=my_model.objects.create(name='张三')         #创建&保存一步完成

b.name="李四"             #改变参数值
b.save()

(2)获取对象(Retrieving objects)

为了获取数据库中对象,需要通过模型类对象(model class)的manager来创建一个QuerySet:

一个QuerySet代表了数据库的对象的集合,它有0个、1个或者许多个过滤器(Filter),Filter可以根据给定参数缩小查询结果的方法,QuerySet就相当与SELECT语句,而Filter就相当于限定子句WHERE或者LIMIT

每一个model class只有一个manager,那就是objects,通过它可以获得一个QuerySet,直接通过model class可以直接访问objects

  • 获取多个对象: all/filter/exclude    获得的是QuerySet
blogs=blog.objects.all()     #获取模型blog中的所有的对象,或者说获取数据库中blog表中所有行(一行代表一个对象)
blogs=blog.objects.all().filter(**kwarg)   # 筛选出满足给定参数的QuerySet
blogs=blog.objects.all().exclude(**kwarg)  # 剃除掉出满足给定参数的QuerySet

#此时QuerySet并没有访问数据,只有当你另外下达指令,它才进行数据库的访问
  • 获取单对象: get     获得的是实例化的类对象(model class)
  • Limiting QuerySet
    
Entry.objects.all()[:5]     #获取前5条记录
Entry.objects.all()[5:10]   #获取第6-10条记录
Entry.objects.order_by('headline')[0]    #获取第1条单条记录

(3) Field lookups : 就是提供给filter(), exclude(), get()  这些函数的参数格式

参考:https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/#field-lookups

一般格式: field__lookuptype=value(注意是双下划线)

Entry.objects.filter(pub_date__lte='2006-01-01')   #pub_date是model class中定义的属性,lte代表<=
#相当与SQL语句:  SELECT * FROM blog_entry WHERE pub_date <= '2006-01-01';

一个例外(外键约束的情况):fieldname_id=value(采用域名加上 “_id”的形式)

Entry.objects.filter(blog_id=4)     #其中的blog是我们定义的model class

一些常见的lookuptype:

  •  exact:  ( 如果提供的field lookups没有 lookuptype,则默认是这种)
Entry.objects.get(headline__exact="Cat bites dog")   #相当于SQL语句:SELECT ... WHERE headline = 'Cat bites dog';
Blog.objects.get(id__exact=14)  # 这两个效果是一样的
Blog.objects.get(id=14)         # 没有looktype,则默认exact这种
Blog.objects.get(name__iexact="beatles blog")     #参数不区分大小写
  • contains:相当于SQL中的LIKE,是否包含子串,区分大小写
    
    Entry.objects.get(headline__contains='Lennon')#相当于:SELECT ... WHERE headline LIKE '%Lennon%';

     

  • startswith/endwith (不区分大小写的版本:istartwith/iendwith)

    Entry.objects.filter(headline__startswith='Lennon') #相当于:SELECT ... WHERE headline LIKE 'Lennon%';

3. pk

为了方便,Django用pk待代表一个表对象的主键primary key

blog = Blog.objects.filter(pk=1)

blog = Blog.object.filter(entry__pk=2)     #访问关系中的pk

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值