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() # 级联删除







  • 相关阅读:
    Ajax在表单中的应用
    jQuery实例
    Ajax之404,200等查询
    Ajax知识总结
    Ajax之eval()函数
    闭包应用
    全局预处理与执行,作用域与作用域链
    替换富文本里的px为rem
    vue2 兼容ie8
    vue-awesome-swiper 水平滚动异常
  • 原文地址:https://www.cnblogs.com/935415150wang/p/7453126.html
Copyright © 2011-2022 走看看