zoukankan      html  css  js  c++  java
  • Django基础07篇 ORM操作

    1.新增(类似数据库操作的insert)

    # 新增
    #方式一:
    models.Category.objects.create(name='MySQL')
    #方式二:
    c = models.Category(name='Oracle')
    c.save()
    
    models.Article.objects.create(
        title='orm学习',
        content='orm学习, content',
        category_id=2
    )  # 知道外键,id
    
    category = models.Category.objects.get(id=3)
    models.Article.objects.create(
        title='orm学习2',
        content='orm学习2, content',
        category=category
        # category_id=category.id     #  category=category  这两行是等价的
    )  # 不知道外键,id

    2.修改(类似数据库操作的update)

    # 修改
    
    c = models.Category.objects.get(id=3)
    c.name = 'JAVA'
    c.save()  # 修改单条数据
    
    models.Category.objects.all().update(name='abc')  # 修改全表的某个字段
    
    # 按照某个条件修改
    models.Category.objects.filter(name='abc').update(name='ccc', age=15)

    3.删除(类似数据库操作的delete)

    # 删除
    c = models.Category.objects.get(id=6)
    c.delete()  # 删除某一条
    
    models.Category.objects.all().delete()  # 删除全表数据
    
    # 按照某些条件删除
    models.Category.objects.filter(name='abc').delete()

    4.查询(类似数据库操作的select) 

    # 简单查询
    result = models.Category.objects.all() # 查询所有的数据
    print(result)
    print(result.values())
    print(result.values_list())
    print(result.values('name'))  # 根据某个字段的值过滤结果集
    print(result.values_list('name'))  # 根据某个字段的值过滤结果集
    print(result.first())  # 获取结果集的第一个元素
    print(result.count())  # 获取结果集中结果个数
    result = models.Category.objects.get(id=1)  # 获取单条结果
    print(result)
    # 复杂查询
    # 大于、小于、大于等于、小于等于、in 、not 、或
    
    result = models.Article.objects.filter(read_count__gt=0)  # 大于0
    print(result)
    result = models.Article.objects.filter(read_count__gte=0)  # 大于等于0
    print(result)
    result = models.Article.objects.filter(read_count__lt=0)  # 小于0
    print(result)
    result = models.Article.objects.filter(read_count__lte=0)  # 小于等于0
    print(result)
    result = models.Article.objects.exclude(read_count=0)  # 不等于  not
    print(result)
    result = models.Article.objects.filter(id__in=[1, 2, 3])  # in
    print(result)
    # 模糊查询
    result = models.Article.objects.filter(title__contains='orm')  # like,包含某个字符串
    print(result)
    result = models.Article.objects.filter(title__icontains='orm')  # like,忽略大小写包含某个字符串
    print(result)
    result = models.Article.objects.filter(title__endswith='xxx')  # 以什么结尾
    
    # 如果用get取单独1条数据时有报错风险,建议使用下面的代码,更健壮
    query_set = models.Article.objects.filter(id=5)
    if query_set:
        article = query_set.first()
    else:
        print('这条数据不存在')
    
    # 多条件查询 or  and
    # where read_count >0 or title like '%orm%'
    result = models.Article.objects.filter(Q(read_count__gt=0) | Q(title__contains='orm'))
    print(result)
    # where read_count >0 and title like '%orm%'
    result = models.Article.objects.filter(Q(read_count__gt=0) & Q(title__contains='orm'))
    print(result)
    result = models.Article.objects.filter(read_count=0,title='python06篇')
    print(result)
    # where read_count >0 and title not like '%orm%'
    result = models.Article.objects.filter(Q(read_count=0) & ~Q(title__contains='orm'))  # ~放在Q()前代表Q的非
    print(result)

    查询结果

    <QuerySet [<Category: python>, <Category: Linux>, <Category: JAVA>, <Category: apche>, <Category: MySQL>]>
    <QuerySet [{'id': 1, 'create_time': datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), 'update_time': datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), 'name': 'python'}, {'id': 2, 'create_time': datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), 'update_time': datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), 'name': 'Linux'}, {'id': 3, 'create_time': datetime.datetime(2020, 11, 18, 23, 6, 21, 743606), 'update_time': datetime.datetime(2020, 11, 29, 15, 12, 4, 149925), 'name': 'JAVA'}, {'id': 4, 'create_time': datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), 'update_time': datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), 'name': 'apche'}, {'id': 5, 'create_time': datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), 'update_time': datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), 'name': 'MySQL'}]>
    <QuerySet [(1, datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), datetime.datetime(2020, 11, 18, 23, 5, 22, 413832), 'python'), (2, datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), datetime.datetime(2020, 11, 18, 23, 6, 14, 86852), 'Linux'), (3, datetime.datetime(2020, 11, 18, 23, 6, 21, 743606), datetime.datetime(2020, 11, 29, 15, 12, 4, 149925), 'JAVA'), (4, datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), datetime.datetime(2020, 11, 18, 23, 33, 40, 410426), 'apche'), (5, datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), datetime.datetime(2020, 11, 29, 14, 59, 9, 537770), 'MySQL')]>
    <QuerySet [{'name': 'python'}, {'name': 'Linux'}, {'name': 'JAVA'}, {'name': 'apche'}, {'name': 'MySQL'}]>
    <QuerySet [('python',), ('Linux',), ('JAVA',), ('apche',), ('MySQL',)]>
    python
    5
    python
    <QuerySet [<Article: orm学习2>, <Article: python基础篇03>, <Article: python基础篇01>]>
    <QuerySet [<Article: orm学习2>, <Article: orm学习>, <Article: python08篇>, <Article: python07篇>, <Article: python06篇>, <Article: python05篇>, <Article: python04篇>, <Article: python基础篇03>, <Article: python基础篇02>, <Article: python基础篇01>]>
    <QuerySet []>
    <QuerySet [<Article: orm学习>, <Article: python08篇>, <Article: python07篇>, <Article: python06篇>, <Article: python05篇>, <Article: python04篇>, <Article: python基础篇02>]>
    <QuerySet [<Article: orm学习2>, <Article: python基础篇03>, <Article: python基础篇01>]>
    <QuerySet [<Article: python基础篇03>, <Article: python基础篇02>, <Article: python基础篇01>]>
    <QuerySet [<Article: orm学习2>, <Article: orm学习>]>
    <QuerySet [<Article: orm学习2>, <Article: orm学习>]>
    <QuerySet [<Article: orm学习2>, <Article: orm学习>, <Article: python基础篇03>, <Article: python基础篇01>]>
    <QuerySet [<Article: orm学习2>]>
    <QuerySet [<Article: python06篇>]>
    <QuerySet [<Article: python08篇>, <Article: python07篇>, <Article: python06篇>, <Article: python05篇>, <Article: python04篇>, <Article: python基础篇02>]>
  • 相关阅读:
    iOS 代码让手机震动一下
    iOS开发 --制作圆形的头像(UIImage)
    JAVA基本数据类型和引用数据类型的区别
    jquery基础
    JS基础
    JAVA异常详解
    单例模式详解及java常用类
    JAVA基础之字符串和面向对象
    我的第一篇博客 初识动画,飞机行小动画
    GCD系列:调度组(dispatch_group)
  • 原文地址:https://www.cnblogs.com/lhy-qingqiu/p/14089510.html
Copyright © 2011-2022 走看看