第七章 Django框架——ORM介绍之单表操作

第七章 Django框架——ORM介绍之单表操作

一、增加表记录

二、删除表记录

三、修改表记录

四、查询表记录

补充:

Django终端打印原生sql方法

# 在settings中进行如下配置
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

在Python脚本中调用Django环境

import os
if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "untitled15.settings")
    import django
    django.setup()

    from app01 import models

    books = models.Book.objects.all()
    print(books)

一、增加表记录

 方式一:create()推荐这种

date类型注意:传字符串必须是:2014-5-12,也可以传datetime类型

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

 方式二:save()

book_obj=Book(title="python",state=True,price=100,publish="上海出版社",pub_date="2012-12-12")
book_obj.save()

 

二、删除表记录

 delete()

(1)queryset对象可以调用

(2)obj对象也可以调用

 

1:总共影响的记录数量

{‘app01.Book’}:代表影响了哪个表的记录

1:影响这个表的记录数量

三、修改表记录

 删除方法就是 update()

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

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

对象不能调用

四、查询表记录

两种输出方式

 

基本查询API(以下13种查询方式作为基础必须学会)

(1) all()

查询结果:queryset对象

作用:查询所有结果

(2) filter(**kwargs)

查询结果:queryset对象

作用:它包含了与所给筛选条件相匹配的对象

sql语句对比:相当于sql的where,后面的条件都是and

(逗号代表and)

(3) get(**kwargs)

查询结果:返回的是具体对象

作用:返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

(4) exclude(**kwargs): 

查询结果:queryset对象

作用:除。。。以外的

(5) order_by(*field): 

查询结果:queryset对象

作用:对查询结果排序

用法:

order_by('price')升序

order_by('-price')降序

(6) reverse(): 

查询结果:

作用:对查询结果反向排序

用法:必须用在order_by以后

备注:

(7) count(): 

查询结果:数字对象

作用:返回数据库中匹配查询(QuerySet)的对象数量。

(8) first(): 返回第一条记录

查询结果:返回的是具体对象

作用:返回第一条记录

(9) last(): 

查询结果:返回的是具体对象

作用:返回最后一条记录

(10) exists(): 

查询结果:布尔值

作用:如果QuerySet包含数据,就返回True,否则返回False

(11) values(*field):

查询结果:queryset对象

作用:返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列

sql语句对比:相当于sql中select * from book; 中的*的内容

(12) values_list(*field): 

查询结果:queryset对象

作用:它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

对比value:

value里放字段

values_list里放元祖

(13) distinct(): 

 查询结果:queryset对象

 作用:从返回结果中剔除重复纪录

总结(链式调用):

1.返回Queryset对象的方法后面可以继续添加Queryset对象的方法,打印输出结果仍然是queryset对象

例如:

2.Queryset对象的方法后面一定可以点出返回具体对象的方法,打印输出结果是一条记录

例如:

返回QuerySet对象的方法有

all()

filter()

exclude()

order_by()

reverse()

distinct()

返回特殊的QuerySet

values()       返回一个可迭代的字典序列

values_list() 返回一个可迭代的元祖序列

返回具体对象的

get()

first()

last()

返回布尔值的方法有:

exists()

返回数字的方法有

count()

双下划线查询API

(1)__startswith

作用:以什么开头

(2)__endswith

作用:以什么结尾

(3)__contains

作用:包含...

 

(4)__icontains

作用:不区分大小写查询

(5)__gt

作用:大于

(6)__lt

作用:小于

(7)__gte

作用:大于等于

(8)__lte

作用:小于等于

(9)__range

作用:范围是多少到多少之间

与sql比较:

相当于sql的between

 

(10)__in

作用:获取指定属性为指定值的记录

(11)__year

作用:过滤某年1月1号到12月31号

总结:

双下划线属性可以连用

原文地址:https://www.cnblogs.com/neymargoal/p/9620119.html