django models 操作,django models 数据初始化

  django models 操作,django models 数据初始化

  一、ORM增加

  从django.db导入模型

  类发行者(模型。型号):

  名称=型号CharField(max_length=30,verbose_name=名称)

  地址=型号CharField(地址最大长度=50)

  城市=模特CharField(城市,max_length=60)

  州_省=模型CharField(max_length=30)

  国家=型号CharField(max_length=50)

  网站=模特URLField()

  类别元:

  详细名称=出版商

  详细名称复数=详细名称

  def __str__(self):

  返回自己的名字

  类作者(模型。型号):

  名称=型号CharField(max_length=30)

  def __str__(self):

  返回自己的名字

  类作者详细信息(模型。型号):

  性=模特BooleanField(max_length=1,choices=((0,男),(1, 女),))

  邮件=模特。电子邮件字段()

  地址=型号CharField(max_length=50)

  生日=模特。日期字段()

  作者=模特OneToOneField(作者)

  课堂用书(模型。型号):

  标题=模型CharField(max_length=100)

  作者=模型ManyToManyField(作者)

  发布者=模型。外键(发布者)

  发布日期=模型。日期字段()

  价格=车型. DecimalField(max_digits=5,decimal_places=2,默认值=10)

  def __str__(self):

  返回自我标题

  从app01 .模型导入*

  #创建方式一:作者。对象。创建(name= Alvin )

  #创建方式二:作者。对象。创建(* * { name : Alex })

  #保存方式一:作者=作者(name=alvin) #对象创建方式

  author.save()

  #保存方式二:author=Author() #对象属性添加方式

  author.name=alvin

  author.save()

  增加一对多与多对多字段信息:

  #一对多(外键):

  #方式一:由于绑定一对多的字段,比如发布,存到数据库中的字段名叫发布标识,所以我们可以直接给这个

  # 字段设定对应值:

  Book.objects.create(title=php ,

  publisher_id=2,#这里的2是指为该书对象绑定了出版者表中id=2的行对象

  publication_date=2017-7-7 ,

  价格=99英镑)

  #方式二:

  # 1 先获取要绑定的出版者对象:

  pub_obj=Publisher(name=河大出版社,地址=保定,城市=保定,

  州省=河北,country=China ,website=http://www.hbu.com )

  # 或者

  pub _ obj=publisher。对象。get(id=1)

  # 2 将publisher_id=2改为publisher=pub_obj

  Book.objects.create(title=php ,

  publisher=pub_obj,

  publication_date=2017-7-7 ,

  价格=99英镑)

  #多对多(ManyToManyField()):

  作者1=作者。对象。get(id=1)

  作者2=作者。对象。过滤器(name= Alvin )[0]

  book=Book.objects.get(id=1)

  book.authors.add(作者1、作者2)

  #等同于:

  book.authors.add(*[author1,author2])

  book.authors.remove(*[author1,author2])

  # -

  书=模型Book.objects.filter(id__gt=1)

  作者=模型Author.objects.filter(id=1)[0]

  authors.book_set.add(*book)

  authors.book_set.remove(*book)

  # -

  book.authors.add(1)

  book.authors.remove(1)

  authors.book_set.add(1)

  authors.book_set.remove(1)

  #注意:如果第三张表是通过模特ManyToManyField()自动创建的,那么绑定关系只有上面一种方式

  # 如果第三张表是自己创建的:

  第二册作者(模特。型号):

  作者=模特。外键("作者")

  书=模型。外键("书")

  # 那么就还有一种方式:

  author_obj=models .Author.objects.filter(id=2)[0]

  模型.Book.objects.filter(id=3)[0]

  s=模型第二册作者。对象。创建(作者标识=1,图书标识=2)

  保存()

  s=模型Book2Author(author=author_obj,Book_id=1)

  保存()

  二、ORM删除Book.objects.filter(id=1).删除()注意:表面上是删除了一条,实际上姜戈会默认把這个记录关联的字段,全部删除!这种删除方式也称为级联删除。

  三、ORM修改

  # 方式一

  author=Author.objects.get(id=5)

  author.name=teQ

  author.save()

  # 方式二

  Publish.objects.filter(id=2).更新(name=teQ )

  注意:

  1 .更新不能修改一个单一对象,也就是说对于获取()获取的数据,是不能用更新。而过滤器()获取的数据是一个查询对象,而更新默认是修改一个数据集合的。

  2.注意以下区别:

  # -更新方法直接设定对应属性-

  模特。Book.objects.filter(id=3)。更新(title=PHP )

  ##sql:

  # #更新 app 01 _ book SET title = PHP WHERE app 01 _ book 。id =3;args=(PHP ,3)

  # - Save方法会重置所有属性,效率很低。

  obj=模特。Book.objects.filter(id=3)[0]

   Python

  obj.save()

  #选择“app01_book”。id , app01_book 。标题, app01_book 。价格,

  # app01_book 。颜色, app01_book 。页码,

  # app01_book 。“app01_book”中的“publisher_id”,其中“app01_book”。id=3极限1;

  #

  # UPDATE app 01 _ book SET title = Python , price=3333, color=red , page_num=556,

  # publisher_id=1,其中 app01_book 。id =3;

  查看代码

  四。ORM查询1。查询API

  #查询相关API:

  # 1过滤器(**kwargs):它包含符合给定过滤标准的对象。

  # 2 all():查询所有结果

  # 3 get(**kwargs):返回符合给定过滤条件的对象,并且只返回一个结果。如果有多个对象或没有对象符合过滤条件,将会引发错误。

  # -以下方法是

  # 4 values(*field):返回一个ValueQuerySet——特殊的QuerySet。运行后,你得到的不是一系列模型的实例化对象,而是一个迭代的字典序列。

  # 5 exclude(**kwargs):它包含不符合给定过滤标准的对象。

  # 6 order_by(*field):对查询结果进行排序。

  # 7 reverse():对查询结果进行反向排序。

  # 8 distinct():从返回的结果中消除重复记录。

  # 9 values_list(*field):与values()非常相似,它返回一个元组序列,values返回一个字典序列。

  # 10 count():返回数据库中与查询匹配的对象的数量。

  # 11 first():返回第一条记录

  # 12 last():返回最后一条记录

  # 13 exists():如果QuerySet包含数据,则返回True,否则返回False。

  2.单表查询

  -

  # models . tb1 . objects . filter(id _ _ lt=10,ID _ _ gt=1) #获取ID大于1小于10的值

  # models . tb1 . objects . filter(id _ _ in=[11,22,33]) #获取ID等于11,22,33的数据

  #型号。Tb1.objects.exclude(id__in=[11,22,33]) # not in

  #型号。tb1 . objects . filter(name _ _ contains= ven )

  # models . tb1 . objects . filter(name _ _ icontains= ven )# icontains不区分大小写。

  # models . tb1 . objects . filter(id _ _ range=[1,2]) # range bettwen和

  # startswith,istartswith,endswith,iendswith,

  3.QuerySet惯性机制:Publisher.objects.all()或。过滤器()等。都只是返回一个QuerySet(查询结果集对象),并不立即执行sql,只是在调用QuerySet时才执行。

  特征:迭代和切片

  # objs=模型。Book.objects.all()#[obj1,obj2,ob3.]

  #QuerySet:迭代

  # for obj in objs:#每个obj都是一个行对象。

  # print(obj:,obj)

  # QuerySet:可滑动

  # print(对象[1])

  # print(对象[1:4])

  # print(对象[:-1])

  4.对象查询、单表条件查询、多表条件联查。

  # Book与Publisher有一对多的关系。

  # -

  #正向查找

  ret1=型号。Book.objects.first()

  打印(ret1.title)

  打印(ret1.price)

  打印(ret1.publisher)

  Print(ret1.publisher.name) #由于一对多关系,ret1.publisher是一个对象,而不是queryset集合。

  #反向查找

  re=models . publish . objects . last()#获取不带外键字段的表对象。

  打印(ret2.name)

  打印(ret2.city)

  #如何将Book对象绑定到它?

  print(ret 2 . book _ set . all())# ret 2 . book _ set是一个queryset集合。

  # -

  #正向查找(条件)

  # ret3=型号。book . objects . filter(title= Python )。值( id )

  # print(ret3)#[{id: 1}]

  #正向查找(条件)一对多

  ret=models . book . objects . filter(title= python )。Values (publisher _ _ city) #查找图书出版商Python所在的城市。

  print(ret 4)#[{ publisher _ _ city : Beijing }]

  #多对多正向查找(条件)

  ret5=型号。book . objects . filter(title= Python )。值(作者_ _姓名)

  打印(返回5)

  ret6=型号。book . objects . filter(author _ _ name= Alex )。值(“标题”)

  打印(返回6)

  #注意

  # publisher in publisher__city或author__name,author是book表中的绑定字段。

  #这里一对多和多对多的用法没有区别。

  #反向查找(条件)-在没有外键的表中,查找其关联表的字段信息。

  #一对多反向查找:

  ret8=型号。publisher . objects . filter(book _ _ title= Python )。值(“名称”)

  Print(ret8)#[{name :人大出版社 }]注意,book__title中的图书是出版社的关联表名。

  ret9=型号。publisher . objects . filter(book _ _ title= Python )。值( book__authors )

  print(ret 9)#[{ book _ _ authors :1 },{book__authors: 2}]

  #多对多反向查找:

  ret10=型号。author . objects . filter(book _ _ title= Python )。值(“名称”)

  print(ret10)#[{name: alex},{name: alvin}]

  #注意

  #前瞻性图书_ _标题中的图书是表名图书。

  #这里一对多和多对多的用法没有区别。

  5.聚集查询和分组查询1 .聚集

  通过QuerySet的计算返回聚合值的字典。aggregate()中每个参数指定字典中包含的返回值。也就是说,聚合是根据查询集生成的。

  从django.db.models导入平均值、最小值、总和、最大值

  #从整个查询集生成统计信息。例如,您想计算所有在售书籍的平均价格。Django的查询语法提供了一种描述所有#

  #一堆书。

  Book.objects.all()。合计(平均值(价格))

  # { 价格_ _平均值:34.35}

  # aggregate()子句的参数描述了我们要计算的聚合值,在本例中是图书模型中price字段的平均值。

  # aggregate()是QuerySet的终止子句,这意味着它返回一个包含一些键值对的字典。键的名称是聚合#值的名称。

  # identifier,该值是计算出的聚合值。键的名称是根据字段和聚合函数的名称自动生成的。如果要为聚合值指定

  #一个名称,可以提供给聚合子句:

  book . objects . aggregate(average _ price=Avg( price ))

  # { 平均价格:34.35}

  #如果你也想知道所有书的最高价和最低价,可以这样查询:

  # book . objects . aggregate(Avg( price ),Max(price ),Min(price ))

  # {price__avg: 34.35, price__max: Decimal(81.20 ), price__min: Decimal(12.99)}

  2 .注释

  您可以计算与查询结果中每个对象相关联的对象集,以获得总值(平均值或总和),也就是说,为查询集中的每个项目生成聚合。

  #查询作者的所有书名teQ

  book . objects . filter(authors _ _ name= teQ )。值(“标题”)

  #查看作者所有书籍的总价teQ

  book . objects . filter(authors _ _ name= teQ )。注释(总和(价格))

  #对于作者出版的每本书,最高价:按作者姓名分组。

  ret=book . objects . values( authors _ _ name )。注释(最高(价格))

  #所有出版社出版的价格最低的书

  ret=book . objects . values( publish _ _ name )。注释(最小(价格))

  6.F查询和Q查询F使用查询条件的值来选择对象中的列值。

  q查询提供了or操作。

  #来自django.db.models导入F

  #型号。tb1 . objects . update(num=F( num )1)

  # Q构建搜索标准

  从django.db.models导入Q

  #1 Q对象(django.db.models.Q)可以封装关键字参数,以便更好地应用多个查询。

  q1=型号。book . objects . filter(Q(title _ _ starts with= P ))。全部()

  print(q1)#[ Book: Python,Book: Perl ]

  # 2,可以组合使用,运算符,当一个运算符用于两个Q对象时,会产生一个新的Q对象。

  Q(title _ _ starts with= P ) Q(title _ _ starts with= J )

  # 3、Q宾语可放在~运算符前表示否定,也可允许否定与非否定的组合。

  Q(title _ _ starts with= P ) ~ Q(pub _ date _ _ year=2005)

  # 4、应用范围:

  Book.objects.get(

  Q(title__startswith=P ),

  Q(发布日期=日期(2005,5,2)) Q(发布日期=日期(2005,5,6))

  )

  #sql:

  #从民意调查中选择*问题,如“P%”

  # AND(发布日期=2005年5月2日或发布日期=2005年5月6日)

  #导入日期时间

  # e=datetime.date(2005,5,6) #2005-05-06

  # 5、问对象可以与关键字参数查询一起使用,不过一定要把Q对象放在关键字参数查询的前面。

  # 正确:

  Book.objects.get(

  问(发布日期=日期(2005,5,2)) Q(发布日期=日期(2005,5,6)),

  title__startswith=P )

  # 错误:

  Book.objects.get(

  问题_ _以=P 开头,

  问(发布日期=日期(2005,5,2)) Q(发布日期=日期(2005,5,6))

  参考

  一、ORM增加

  从django.db导入模型

  类发行者(模型。型号):

  名称=型号CharField(max_length=30,verbose_name=名称)

  地址=型号CharField(地址最大长度=50)

  城市=模特CharField(城市,max_length=60)

  州_省=模型CharField(max_length=30)

  国家=型号CharField(max_length=50)

  网站=模特URLField()

  类别元:

  详细名称=出版商

  详细名称复数=详细名称

  def __str__(self):

  返回自己的名字

  类作者(模型。型号):

  名称=型号CharField(max_length=30)

  def __str__(self):

  返回自己的名字

  类作者详细信息(模型。型号):

  性=模特BooleanField(max_length=1,choices=((0,男),(1, 女),))

  邮件=模特。电子邮件字段()

  地址=型号CharField(max_length=50)

  生日=模特。日期字段()

  作者=模特OneToOneField(作者)

  课堂用书(模型。型号):

  标题=模型CharField(max_length=100)

  作者=模型ManyToManyField(作者)

  发布者=模型。外键(发布者)

  发布日期=模型。日期字段()

  价格=车型. DecimalField(max_digits=5,decimal_places=2,默认值=10)

  def __str__(self):

  返回自我标题

  从app01 .模型导入*

  #创建方式一:作者。对象。创建(name= Alvin )

  #创建方式二:作者。对象。创建(* * { name : Alex })

  #保存方式一:作者=作者(name=alvin) #对象创建方式

  author.save()

  #保存方式二:author=Author() #对象属性添加方式

  author.name=alvin

  author.save()

  增加一对多与多对多字段信息:

  #一对多(外键):

  #方式一:由于绑定一对多的字段,比如发布,存到数据库中的字段名叫发布标识,所以我们可以直接给这个

  # 字段设定对应值:

  Book.objects.create(title=php ,

  publisher_id=2,#这里的2是指为该书对象绑定了出版者表中id=2的行对象

  publication_date=2017-7-7 ,

  价格=99英镑)

  #方式二:

  # 1 先获取要绑定的出版者对象:

  pub_obj=Publisher(name=河大出版社,地址=保定,城市=保定,

  州省=河北,country=China ,website=http://www.hbu.com )

  # 或者

  pub _ obj=publisher。对象。get(id=1)

  # 2 将publisher_id=2改为publisher=pub_obj

  Book.objects.create(title=php ,

  publisher=pub_obj,

  publication_date=2017-7-7 ,

  价格=99英镑)

  #多对多(ManyToManyField()):

  作者1=作者。对象。get(id=1)

  作者2=作者。对象。过滤器(name= Alvin )[0]

  book=Book.objects.get(id=1)

  book.authors.add(作者1、作者2)

  #等同于:

  book.authors.add(*[author1,author2])

  book.authors.remove(*[author1,author2])

  # -

  书=模型Book.objects.filter(id__gt=1)

  作者=模型Author.objects.filter(id=1)[0]

  authors.book_set.add(*book)

  authors.book_set.remove(*book)

  # -

  book.authors.add(1)

  book.authors.remove(1)

  authors.book_set.add(1)

  authors.book_set.remove(1)

  #注意:如果第三张表是通过模特ManyToManyField()自动创建的,那么绑定关系只有上面一种方式

  # 如果第三张表是自己创建的:

  第二册作者(模特。型号):

  作者=模特。外键("作者")

  书=模型。外键("书")

  # 那么就还有一种方式:

  author_obj=models .Author.objects.filter(id=2)[0]

  模型.Book.objects.filter(id=3)[0]

  s=模型第二册作者。对象。创建(作者标识=1,图书标识=2)

  保存()

  s=模型Book2Author(author=author_obj,Book_id=1)

  保存()

  二、ORM删除Book.objects.filter(id=1).删除()注意:表面上是删除了一条,实际上姜戈会默认把這个记录关联的字段,全部删除!这种删除方式也称为级联删除。

  三、ORM修改

  # 方式一

  author=Author.objects.get(id=5)

  author.name=teQ

  author.save()

  #模式2

  Publish.objects.filter(id=2)。更新(name=teQ )

  注意:

  1.update不能修改单个对象,也就是说get()得到的数据不能更新。filter()获取的数据是QuerySet对象,update默认修改数据集。

  2.请注意以下差异:

  # - Update方法直接设置相应的属性。

  模特。Book.objects.filter(id=3)。更新(title=PHP )

  ##sql:

  # #更新 app 01 _ book SET title = PHP WHERE app 01 _ book 。id =3;args=(PHP ,3)

  # - Save方法会重置所有属性,效率很低。

  obj=模特。Book.objects.filter(id=3)[0]

   Python

  obj.save()

  #选择“app01_book”。id , app01_book 。标题, app01_book 。价格,

  # app01_book 。颜色, app01_book 。页码,

  # app01_book 。“app01_book”中的“publisher_id”,其中“app01_book”。id=3极限1;

  #

  # UPDATE app 01 _ book SET title = Python , price=3333, color=red , page_num=556,

  # publisher_id=1,其中 app01_book 。id =3;

  查看代码

  四。ORM查询1。查询API

  #查询相关API:

  # 1过滤器(**kwargs):它包含符合给定过滤标准的对象。

  # 2 all():查询所有结果

  # 3 get(**kwargs):返回符合给定过滤条件的对象,并且只返回一个结果。如果有多个对象或没有对象符合过滤条件,将会引发错误。

  # -以下方法是

  # 4 values(*field):返回一个ValueQuerySet——特殊的QuerySet。运行后,你得到的不是一系列模型的实例化对象,而是一个迭代的字典序列。

  # 5 exclude(**kwargs):它包含不符合给定过滤标准的对象。

  # 6 order_by(*field):对查询结果进行排序。

  # 7 reverse():对查询结果进行反向排序。

  # 8 distinct():从返回的结果中消除重复记录。

  # 9 values_list(*field):与values()非常相似,它返回一个元组序列,values返回一个字典序列。

  # 10 count():返回数据库中与查询匹配的对象的数量。

  # 11 first():返回第一条记录

  # 12 last():返回最后一条记录

  # 13 exists():如果QuerySet包含数据,则返回True,否则返回False。

  2.单表查询

  -

  # models . tb1 . objects . filter(id _ _ lt=10,ID _ _ gt=1) #获取ID大于1小于10的值

  # models . tb1 . objects . filter(id _ _ in=[11,22,33]) #获取ID等于11,22,33的数据

  #型号。Tb1.objects.exclude(id__in=[11,22,33]) # not in

  #型号。tb1 . objects . filter(name _ _ contains= ven )

  # models . tb1 . objects . filter(name _ _ icontains= ven )# icontains不区分大小写。

  # models . tb1 . objects . filter(id _ _ range=[1,2]) # range bettwen和

  # startswith,istartswith,endswith,iendswith,

  3.QuerySet惯性机制:Publisher.objects.all()或。过滤器()等。都只是返回一个QuerySet(查询结果集对象),并不立即执行sql,只是在调用QuerySet时才执行。

  特征:迭代和切片

  # objs=模型。Book.objects.all()#[obj1,obj2,ob3.]

  #QuerySet:迭代

  # for obj in objs:#每个obj都是一个行对象。

  # print(obj:,obj)

  # QuerySet:可滑动

  # print(对象[1])

  # print(对象[1:4])

  # print(对象[:-1])

  4.对象查询、单表条件查询、多表条件联查。

  # Book与Publisher有一对多的关系。

  # -

  #正向查找

  ret1=型号。Book.objects.first()

  打印(ret1.title)

  打印(ret1.price)

  打印(ret1.publisher)

  Print(ret1.publisher.name) #由于一对多关系,ret1.publisher是一个对象,而不是queryset集合。

  #反向查找

  re=models . publish . objects . last()#获取不带外键字段的表对象。

  打印(ret2.name)

  打印(ret2.city)

  #如何将Book对象绑定到它?

  print(ret 2 . book _ set . all())# ret 2 . book _ set是一个queryset集合。

  # -

  #正向查找(条件)

  # ret3=型号。book . objects . filter(title= Python )。值( id )

  # print(ret3)#[{id: 1}]

  #正向查找(条件)一对多

  ret=models . book . objects . filter(title= python )。Values (publisher _ _ city) #查找图书出版商Python所在的城市。

  print(ret 4)#[{ publisher _ _ city : Beijing }]

  #多对多正向查找(条件)

  ret5=型号。book . objects . filter(title= Python )。值(作者_ _姓名)

  打印(返回5)

  ret6=型号。book . objects . filter(author _ _ name= Alex )。值(“标题”)

  打印(返回6)

  #注意

  # publisher in publisher__city或author__name,author是book表中的绑定字段。

  #这里一对多和多对多的用法没有区别。

  #反向查找(条件)-在没有外键的表中,查找其关联表的字段信息。

  #一对多反向查找:

  ret8=型号。publisher . objects . filter(book _ _ title= Python )。值(“名称”)

  Print(ret8)#[{name :人大出版社 }]注意,book__title中的图书是出版社的关联表名。

  ret9=型号。publisher . objects . filter(book _ _ title= Python )。值( book__authors )

  print(ret 9)#[{ book _ _ authors :1 },{book__authors: 2}]

  #多对多反向查找:

  ret10=型号。author . objects . filter(book _ _ title= Python )。值(“名称”)

  print(ret10)#[{name: alex},{name: alvin}]

  #注意

  #前瞻性图书_ _标题中的图书是表名图书。

  #这里一对多和多对多的用法没有区别。

  5.聚集查询和分组查询1 .聚集

  通过QuerySet的计算返回聚合值的字典。aggregate()中每个参数指定字典中包含的返回值。也就是说,聚合是根据查询集生成的。

  从django.db.models导入平均值、最小值、总和、最大值

  #从整个查询集生成统计信息。例如,您想计算所有在售书籍的平均价格。Django的查询语法提供了一种描述所有#

  #一堆书。

  Book.objects.all()。合计(平均值(价格))

  # { 价格_ _平均值:34.35}

  # aggregate()子句的参数描述了我们要计算的聚合值,在本例中是图书模型中price字段的平均值。

  # aggregate()是QuerySet的终止子句,这意味着它返回一个包含一些键值对的字典。键的名称是聚合#值的名称。

  # identifier,该值是计算出的聚合值。键的名称是根据字段和聚合函数的名称自动生成的。如果要为聚合值指定

  #一个名称,可以提供给聚合子句:

  book . objects . aggregate(average _ price=Avg( price ))

  # { 平均价格:34.35}

  #如果你也想知道所有书的最高价和最低价,可以这样查询:

  # book . objects . aggregate(Avg( price ),Max(price ),Min(price ))

  # {price__avg: 34.35, price__max: Decimal(81.20 ), price__min: Decimal(12.99)}

  2 .注释

  您可以计算与查询结果中每个对象相关联的对象集,以获得总值(平均值或总和),也就是说,为查询集中的每个项目生成聚合。

  #查询作者的所有书名teQ

  book . objects . filter(authors _ _ name= teQ )。值(“标题”)

  #查看作者所有书籍的总价teQ

  book . objects . filter(authors _ _ name= teQ )。注释(总和(价格))

  #对于作者出版的每本书,最高价:按作者姓名分组。

  ret=book . objects . values( authors _ _ name )。注释(最高(价格))

  #所有出版社出版的价格最低的书

  ret=book . objects . values( publish _ _ name )。注释(最小(价格))

  6.F查询和Q查询F使用查询条件的值来选择对象中的列值。

  q查询提供了or操作。

  #来自django.db.models导入F

  #型号。tb1 . objects . update(num=F( num )1)

  # Q构建搜索标准

  从django.db.models导入Q

  #1 Q对象(django.db.models.Q)可以封装关键字参数,以便更好地应用多个查询。

  q1=型号。book . objects . filter(Q(title _ _ starts with= P ))。全部()

  print(q1)#[ Book: Python,Book: Perl ]

  # 2,可以组合使用,运算符,当一个运算符用于两个Q对象时,会产生一个新的Q对象。

  Q(title _ _ starts with= P ) Q(title _ _ starts with= J )

  # 3、Q宾语可放在~运算符前表示否定,也可允许否定与非否定的组合。

  Q(title _ _ starts with= P ) ~ Q(pub _ date _ _ year=2005)

  # 4、应用范围:

  Book.objects.get(

  Q(title__startswith=P ),

  Q(发布日期=日期(2005,5,2)) Q(发布日期=日期(2005,5,6))

  )

  #sql:

  #从民意调查中选择*问题,如“P%”

  # AND(发布日期=2005年5月2日或发布日期=2005年5月6日)

  #导入日期时间

  # e=datetime.date(2005,5,6) #2005-05-06

  # 5、Q对象可以和关键字参数查询一起使用,但是一定要把Q对象放在关键字参数查询的前面。

  #正确:

  Book.objects.get(

  Q(发布日期=日期(2005,5,2)) Q(发布日期=日期(2005,5,6)),

  title__startswith=P )

  #错误:

  Book.objects.get(

  问题_ _以=P 开头,

  Q(发布日期=日期(2005,5,2)) Q(发布日期=日期(2005,5,6))

  涉及

  转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: