zoukankan      html  css  js  c++  java
  • 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() # 级联删除







  • 相关阅读:
    值得学习的网站
    搜集的前端面试题,慢慢补充完答案
    vue2.0 transition 多个元素嵌套使用过渡
    vue2.0过度动画
    Vue中data、props、computed中数据的区别
    理解 $nextTick 的作用
    项目中使用better-scroll实现移动端滚动,报错:Cannot read property 'children' of undefined better-scroll
    less预编译语言使用总结
    vue项目配置less预编译语言
    CrossApp 0.3.8 发布,跨平台移动App开发引擎
  • 原文地址:https://www.cnblogs.com/935415150wang/p/7453126.html
Copyright © 2011-2022 走看看