django的orm简签

ORM


1 添加方法

表.objects.create()

obj=类(title="")
obj.save()


外键字段添加方式(一对多)

Book.objects.create(title="",price="",publish_id=) # publish_id对应的Publish表中的主键id
Book.objects.create(title="",price="",publish=pub_obj) # publish_id对应的Publish表中的主键id

book_obj.publish : 与这本书相关联的出版社对象(一个)


外键字段添加方式(多对多)

authors=models.ManyToManyFields("Author")
book_obj.authors : 与这本书相关的所有的作者集合(querySet)

book_obj.authors.add(obj1,obj2)
book_obj.authors.add(*[])

book_obj.authors.remove(obj)
book_obj.authors.clear()


2 查询方法


表.objects.all() -----------QuerySet [obj,obj]
表.objects.filter(id__gt=3,id__lt=6) -----------QuerySet [obj,obj]
表.objects.get() -----------model对象

QuerSet.first() -----------model对象
QuerSet.last() -----------model对象 eg: 表.objects.all().first()


表.objects.values(字段) --------- 存放字典的集合对象



<QuerySet [{'price': Decimal('45.00'), 'title': 'linux'}, {'price': Decimal('100.00'), 'title': '老男孩历险记'}, {'price': Decimal('12.00'), 'title': '老男孩感情史'}]>

QuerySet:

1 可切片
2 可迭代
3 惰性机制

iterator
exits



连表查询
class Book_authors():
book_id=...
author_id=....

class Author():
name=.....

#books=models.ManyToManyFields("Book")

class Publish():
name=....

class BOOK():

title=...
publish=...

authors=.....


1 基于对象

正向查询:

# 查询某本书的出版社或者作者信息

book_obj=BOOK.objects.get(id=4)
book_obj.publish # 与这本书相关联的出版社
book_obj.authors # 与这本书关联的作者对象集合

反向查询:
# 查询某个出版社出版过的书
# 查询某个作者出版社过的书

author_obj=Author.objects.get(id=2)
author_obj.关联表名__set
author_obj.book__set # 与这个作者关联的所有书籍对象的集合




2 基于 filter values __

表.objects.filter().values()
# 查询python这本书的出版社名字
BOOK.objects.filter(title="python").values(publish__name)
Publish.objects.filter(book__title="python").values("name")


聚合与分组

在sql:
select max() group by 字段 having
select Avg(score) from stu


aggreagte:
Book.objects.all().aggregate(AvgPrice=Avg("price"))
annotate:

# 每一个作者出版过的书中的最高价 : 按作者名字分组
ret4=Book.objects.values("authors__name").annotate(Max("price"))
print(ret4)


F Q
F:
Book.objects.all().update(price=F("price")+20)

Q:
Book.objects.filter(Q(price__gt=200) | Q(id__gt=5) ,title__startswith="老")


3 修改方法

Book.objects.filter(id=5).update(price=1000)

4 删除
Book.objects.filter(id=5).delete() # 级联删除







原文地址:https://www.cnblogs.com/935415150wang/p/7453126.html