django oRm之增删改查和万能的下划线

1.setting配置和打印原生sql日志

setting配置连接mysql

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'django_orm',    #你的数据库名称

        'USER': 'root',   #你的数据库用户名

        'PASSWORD': '123456', #你的数据库密码

        'HOST': '', #你的数据库主机,留空默认为localhost

        'PORT': '3306', #你的数据库端口

    }

}

配置打印原生sql:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

2.配置使用pymysql,放到项目的init.py里

import pymysql
pymysql.install_as_MySQLdb()

django oRm之增删改查和万能的下划线_第1张图片

3.增删改查

# Create your views here.
def index(request):
    return render(request, 'index.html')


def addbook(request):
    # 第一种方式
    # b=Book(name='python',price=99,author='guo',pub_date='2019-09-17')
    # b.save()
    # 第二种方式
    Book.objects.create(name='老男孩linux', price=78, author='oldboy', pub_date='2019-09-17')
    return HttpResponse('添加成功')

def update(request):
    #第一种 单对单
    # Book.objects.filter(author='oldboy').update(price=999)
    #第二种方法 所有都重新赋值效率低
    b = Book.objects.get(author='guo')
    b.price=120
    b.save()

    return HttpResponse('修改成功')

def delete(request):
    Book.objects.filter(author='oldboy').delete()
    return HttpResponse('删除成功')

def select(request):
    book_list=Book.objects.all()
    return render(request,'index.html',locals())

4.Book.objects.get(id=5)获取一天数据,filter数据组--元素放对象

    # book_list=Book.objects.all() 获取所有对象,放入一个列表里
    # print(book_list)
    # print(book_list[0])#Book object
    # book_list = Book.objects.filter(id=2)

    链表支持切片
    # book_list = Book.objects.all()[::2]
    # book_list = Book.objects.all()[::-1]

   获取第一个对象
    # book_list = Book.objects.first()

 获取最后一个对象
    # book_list = Book.objects.last()
    # book_list = Book.objects.get(id=2)#只能取出一条记录时才不报错

   获取某一列的值
    # ret1=Book.objects.filter(author="oldboy").values("name")

列表字典,列表名:对应值

    # ret2=Book.objects.filter(author="yuan").values_list("namfe","price")

列表放元祖的集合,每个元祖f放所有查询字段的集合
    # book_list=Book.objects.exclude(author="yuan").values("name","price")
    # print(ret1)
    # print(ret2)

    # book_list= Book.objects.all().values("name").distinct()
    # book_count= Book.objects.all().values("name").distinct().count()
    # print(book_count)

5.万能的双下划线

__exact        精确等于 like 'aaa'
__iexact    精确等于 忽略大小写 ilike 'aaa'
__contains    包含 like '%aaa%'
__icontains    包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
__gt    大于
__gte    大于等于
__lt    小于
__lte    小于等于
__in     存在于一个list范围内
__startswith   以...开头
__istartswith   以...开头 忽略大小写
__endswith     以...结尾
__iendswith    以...结尾,忽略大小写
__range    在...范围内
__year       日期字段的年份
__month    日期字段的月份
__day        日期字段的日
__isnull=True/False
__isnull=True 与 __exact=None的区别
book_list=Book.objects.filter(price__gt=50).values("name","price")
book_list=Book.objects.filter(name__contains="P").values_list("name","price")

你可能感兴趣的:(django框架2.0)