zoukankan      html  css  js  c++  java
  • ORM映射(对象关系映射)

    ORM映射(对象关系映射)
    分创建表和操作表两个部分
    创建单表
    创建关联表(foreignKey)
    一对一
    一对多(重点)
    多对多(重点)
    创建表后加str方法把打印的地址转换成对应字符
    表的操作(增删改查):
    1.增(create,save)
    from app01.modals import *
    create方式一:Author.objects.create(name="eric")
    create方式二:Author.objects.create(*{"name":"eric"})
    save方式一:author = Author(name="eric")
    author.save()
    save方式二:author=Author()
    author.name="eric"
    author.save()
    2.删(delete)
    Book.object.filter(id=1).delete()
    (3,{'app01.Book_authors':2,'app01.Book':1})
    3.改(update,save)
    update直接改:Publisher.objects.filter(id=2).update(name='eric')
    save相当于重新赋值:author=Author.object.get(id=5)
    author.name='eric'
    author.save()
    4.查(filte,value等)
    查询API:54-02
    filter:(**kwargs) :它包含了与所给筛选条件相匹配的对象
    all():查询所有结果
    get(**kwargs):返回与所给筛选条件匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会
    抛出错误。
    对查询结果进行处理:
    values(**kwargs):返回一个ValueQuerySet 一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而
    是一个可迭代的字典序列
    exclude(**kwargs):它包含了与所给筛选条件不匹配的对象
    order_by(*field):对查询结果排序
    reverse():对查询结果反向排序
    distinct():从返回结果中剔除重复记录
    values_list(*field):它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
    count():返回数据库中匹配查询(QuerySet)的对象数量。
    fist():返回第一条记录
    last():返回最后一条记录
    exists():如果QuerySet包含数据就返回True,否则就返回False
    惰性机制:
    1.可迭代
    2.可切片
    5.重点:如何创建存在一对多或多对多关系一本书的信息呢?(如何处理外键关系的字段如一对多的publisher和
    多对多的authors)
    一对一(OneToOne):
    一对多(foreignKey):
    插入(1)models.Book.object.create(title="Python",publish_id=2)
    (2)推荐使用:
    models.Book.object.create(title="Python",publish=obj)
    由于绑定一对多的字段,比如publlish_id
    多对多(通过外键和方法自动创建第三张表):model.manytomanyfield()
    自动创建第三张表:
    add()绑定关系
    remove()解除关系
    ----正向查询(例子是从2开始建立的正向查询)
    book=models.Book.objects.filter(id=2)[0] #获取id=2时的参数值
    authors=models.Author.objects.filter(id__gt=2) #大于2
    book.author.add(*authors)
    book.author.remove(*authors) #移除关系
    ----反向查询 (例子是从3开始到2建立的反向查询)
    author=models.Author.objects.filter(id=3)[0]
    books=models.Book.objects.filter(id__gt=2)
    author.book_set.add(*books)
    author.book_set.remove(*books) #移除关系
    非自动创建第三张表(手动):
    手动建表可以直接插入数据
    联合唯一:unique_together=['字段','字段']
    控制台执行数据库操作:
    python manage.py makemigrations
    python manage.py migrate
    注:第三张表的删除会出现级联删除情况,update()方法要用集合对象才能调用
    manytomany():通过两个foreignKey
    缓存时用iterator()方法把对象封装成可迭代对象
  • 相关阅读:
    HDU Railroad (记忆化)
    HDU 1227 Fast Food
    HDU 3008 Warcraft
    asp vbscript 检测客户端浏览器和操作系统(也可以易于升级到ASP.NET)
    Csharp 讀取大文本文件數據到DataTable中,大批量插入到數據庫中
    csharp 在万年历中计算显示农历日子出错
    csharp create ICS file extension
    CSS DIV Shadow
    DataTable search keyword
    User select fontface/color/size/backgroundColor设置 字体,颜色,大小,背景色兼容主流浏览器
  • 原文地址:https://www.cnblogs.com/wylshkjj/p/11129250.html
Copyright © 2011-2022 走看看