web开发学习 Model对象基本操作

2022-08-11 09:39:12

参考:《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
  • 作者:pczpcz8
  • 原文链接:https://blog.csdn.net/u012331307/article/details/98787103
    更新时间:2022-08-11 09:39:12