Django模型层之单表操作

添加表纪录

方式1

create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象
book_obj=Book.objects.create(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")

方式2

book_obj=Book(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
book_obj.save()

def index(request):
    #方式一
    book=Book(name='红楼梦',pub_data='2015-10-12',price=88,publish='老男孩出版社')
    book.save()
    #方式二
    Book.objects.create(name='Python红宝书',pub_data='2010-10-12',price=100,publish='人民出版社')

查询表纪录

查询API

<1> all():                  查询所有结果
  
<2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
  
<3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
  
<4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
 
<5> order_by(*field):       对查询结果排序('-id')
  
<6> reverse():              对查询结果反向排序
  
<8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
  
<9> first():                返回第一条记录
  
<10> last():                返回最后一条记录
  
<11> exists():              如果QuerySet包含数据,就返回True,否则返回False
 
<12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                            model的实例化对象,而是一个可迭代的字典序列
<13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
 
<14> distinct():            从返回结果中剔除重复纪录
    # QUerySet数据类型(类似于一个列表,里面放着一些对象)
    # 1 方法的返回值是什么
    # 2 方法的调用者
    # (1) all方法 返回一个QuerySet对象
    book_list=Book.objects.all()
    print(book_list[1].name)
    print(book_list)
    for obj in book_list:
        print(obj.name)
    (2)first last:调用者是queryset对象,返回值是对象
    book=Book.objects.all().first()
    book2=Book.objects.all().last()
    print(book)
    print(book2)
    (3) filter  返回值是queryset对象(相当于where语句)
    可以加多个过滤条件
    book=Book.objects.filter(name='红楼梦').first()
    print(book)
    (4)get方法 有且只有一个查询结果才有意义 返回值是一个对象
    book=Book.objects.get(name='红楼梦')
    print(book)
    直接报错
    book = Book.objects.get(name='红楼梦eee')
    --------------最常用-----------------
    (5)exclude 除了查询之外的 返回值也是queryset
    ret=Book.objects.exclude(name='红楼梦')
    print(ret)
    (6)order_by(默认升序,加个- 就是降序),可以多个过滤条件调用者是queryset返回值也是queryset
    book_list=Book.objects.all().order_by('id')
    book_list=Book.objects.all().order_by('-id','price')
    print(book_list)
    (7)count() 调用者是queryset,返回值是int
    ret=Book.objects.all().count()
    print(ret)
    (8)exist()判断是是否有值,不能传参数,
    ret=Book.objects.all().exists()
    print(ret)
    # (9)values方法
    # 查询所有书籍的名称(里面传的值,前提是表有这个字段)也是queryset但是里面放的是字典
    '''
    values原理
    temp=[]
    for obj in Book.objects.all():
        temp.append({'name':obj.name})
    '''
     ret=Book.objects.all().values('name')
    print(ret)
   不加.all()也可以,调用是queryset返回值也是queryset
    ret=Book.objects.values('price')
   print(ret)
  (10)value_list
    ret=Book.objects.all().values_list('price','name')
     print(ret)
    (11) distinct  seletc * 的时候没有意义
     SELECT DISTINCT name from app01_book;
  没有任何意义,不要这样么用
    Book.objects.all().distinct()
    ret=Book.objects.all().values('name').distinct()
    print(ret)

基于双下划线的模糊查询

    # 双下划线模糊查询-----------------------
    # 查询价格大于100的书
    ret=Book.objects.filter(price__gt=100)
    print(ret)
    # 查询大于50小于100的书
    ret=Book.objects.filter(price__gt=50,price__lt=100)
     print(ret)
    # 查询已红楼开头的书
   ret=Book.objects.filter(name__startswith='红楼')
     print(ret)
    # 查询包含‘红’的书
    ret= Book.objects.filter(name__contains='红')
   print(ret)
    # icontains  不区分大小写
    # 价格在50,88,100 中的
    ret=Book.objects.filter(price__in=[50,88,100])
   print(ret)
    # 出版日期在2018年的
   ret=Book.objects.filter(pub_data__year=2015,pub_data__month=2)
    print(ret)

删除表纪录

删除方法就是 delete()。它运行时立即删除对象而不返回任何值。例如:

model_obj.delete()

你也可以一次性删除多个对象。每个 QuerySet 都有一个 delete() 方法,它一次性删除 QuerySet 中所有的对象。

例如,下面的代码将删除 pub_date 是2005年的 Entry 对象:

Entry.objects.filter(pub_date__year=2005).delete()

要注意的是: delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 本身。这是一种保护机制,是为了避免意外地调用 Entry.objects.delete() 方法导致 所有的 记录被误删除。如果你确认要删除所有的对象,那么你必须显式地调用:

Entry.objects.all().delete() 

如果不想级联删除,可以设置为:

pubHouse = models.ForeignKey(to='Publisher', on_delete=models.SET_NULL, blank=True, null=True)
    # delete:调用者可以是queryset也可以是model对象
    # 删除价格为188的书有返回值 (1, {'app01.Book': 1}) 删除的个数,那张表,记录数
     ret=Book.objects.filter(price=188).delete()
     print(ret)
     ret=Book.objects.filter(price=100).first().delete()
     print(ret)

修改表纪录

Book.objects.filter(title__startswith="py").update(price=120

此外,update()方法对于任何结果集(QuerySet)均有效,这意味着你可以同时更新多条记录update()方法会返回一个整型数值,表示受影响的记录条数。

    # 修改 update只能queryset来调用 返回值为int
   ret=Book.objects.filter(name='红楼梦1').update(name='红楼梦')
     print(ret)
     报错
    Book.objects.filter(name='红楼梦').first().update(name='红楼梦1')

   ret=Book.objects.filter(name='红楼梦1').first()
   print(ret.delete())
    aa=Publish.objects.filter(name='人民出版社')
    print(type(aa))
    aa.delete()

    return HttpResponse('ok')
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容

  • 原文:https://my.oschina.net/liuyuantao/blog/751438 查询集API 参...
    阳光小镇少爷阅读 3,817评论 0 8
  • ORM 映射关系:表名 <-------> 类名字段 <-------> 属性表记录 <------->类实例...
    lkning阅读 476评论 0 0
  • 模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。软件设计中通常用耦合度和内聚...
    riverstation阅读 2,064评论 0 8
  • Django 1.8.2 文档Home | Table of contents | Index | Modules...
    轩辕小爱阅读 2,345评论 0 2
  • 2018.2.14 情人节 当情人节遇上春节 让寒气逼人的寒冬腊月变得既温暖又甜密 亲爱的(ღ˘⌣˘ღ)首先我要...
    养人阅读 80评论 0 0