django中对数据库的增删改查

Django的配置文件时settings.py中的
TEMPLATES = [
    {
        ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘,
        ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)],  只修改这一个
        ‘APP_DIRS‘: True,
        ‘OPTIONS‘: {
            ‘context_processors‘: [
                ‘django.template.context_processors.debug‘,
                ‘django.template.context_processors.request‘,
                ‘django.contrib.auth.context_processors.auth‘,
                ‘django.contrib.messages.context_processors.messages‘,
            ],
        },
    },
]

对数据库进行增 删 改 查
在当前的文档的views.py中的
class RegisterView(View):
    def get(self, request):
        1 增加
        book = BookInfo(
            btitle=‘天涯明月刀‘,
            bpub_date=date(1999, 12, 12),
            bread=30,
            bcomment=10
        )
        book.save()

        HeroInfo.objects.create(
            hname=‘叶开‘,
            hgender=0,
            hcomment=‘小李飞刀‘,
            hbook=book
        )
        2 查询
        try:
            基本查询
            查询所有的书名
            books = BookInfo.objects.all()
            print(books)
            book = BookInfo.objects.get(id=1)
            book = BookInfo.objects.get(pk=1)
            book = BookInfo.objects.get(id=100)
            print(book)
            print(BookInfo.objects.count())

            过滤查询
            相等
            print(BookInfo.objects.filter(id__exact=1))
            print(BookInfo.objects.filter(id=1))

            模糊查询
            print(BookInfo.objects.filter(btitle__contains=‘刀‘))
            print(BookInfo.objects.filter(btitle__endswith=‘刀‘))
            print(BookInfo.objects.filter(btitle__startswith=‘天‘))
            以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.

            空查询
            print(BookInfo.objects.filter(btitle__isnull=False))
            print(HeroInfo.objects.filter(hcomment__isnull=False))

            范围查询
            print(BookInfo.objects.filter(id__in=[1, 3, 5]))
            print(HeroInfo.objects.filter(id__in=[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]))

            比较查询
            print(BookInfo.objects.filter(id__gt=3))
            print(BookInfo.objects.exclude(id__gt=3))

            日期查询
            print(BookInfo.objects.filter(bpub_date__year=1980))
            print(BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1)))

            F 对象 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中。
            查询阅读量大于等于评论量的图书。
            print(BookInfo.objects.filter(bread__gte=F(‘bcomment‘)))
            查询阅读量大于等于评论量2倍的图书。
            print(BookInfo.objects.filter(bread__gte=F(‘bcomment‘)*2))

            Q 对象
            多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。
            print(BookInfo.objects.filter(bread__gt=20,id__lt=3))
            print(BookInfo.objects.filter(bread__gt=20).filter(id__lt=3))
            如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符,Q对象被义在django.db.models中。
            查询阅读量大于20的图书,改写为Q对象如下。
            print(BookInfo.objects.filter(Q(bread__gt=20)))
            Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或。查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
            print(BookInfo.objects.filter(Q(bread__gt=20) | Q(pk__lt=3)))
            Q对象前可以使用~操作符,表示非not   查询编号不等于3的图书。
            print(BookInfo.objects.filter(~Q(pk=3)))

            聚合函数
            使用aggregate()过滤器调用聚合函数。聚合函数包括:
            Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。
            查询图书的总阅读量。
            print(BookInfo.objects.aggregate(Sum(‘bread‘)))

            排序
            使用order_by对结果进行排序
            print(BookInfo.objects.all().order_by(‘bread‘))  # 升序
            print(BookInfo.objects.all().order_by(‘-bread‘))  # 降序

            关联查询
            由一到多的访问语法:一对应的模型类对象.多对应的模型类名小写_set 例:
            print(BookInfo.objects.get(id=1).heroinfo_set.all())
            由多到一的访问语法:多对应的模型类对象.多对应的模型类中的关系类属性名 例:
            print(HeroInfo.objects.get(id=1).hbook)
            访问一对应的模型类关联对象的id语法:多对应的模型类对象.关联类属性_id
            print(HeroInfo.objects.get(id=1).hbook_id)

            关联过滤查询
            由多模型类条件查询一模型类数据:
            查询图书,要求图书英雄为"孙悟空"
            print(BookInfo.objects.filter(heroinfo__hname=‘孙悟空‘))
            查询图书,要求图书中英雄的描述包含"八"
            print(BookInfo.objects.filter(heroinfo__hcomment__contains=‘八‘))
            由一模型类条件查询多模型类数据:
            查询书名为“天龙八部”的所有英雄。
            print(HeroInfo.objects.filter(hbook__btitle=‘天龙八部‘))
            查询图书阅读量大于30的所有英雄
            print(HeroInfo.objects.filter(hbook__bread__gt=30))

            3 修改(修改更新有两种方法)
            save  修改模型类对象的属性,然后执行save()方法
            hero = HeroInfo.objects.get(hname=‘猪悟能‘)
            hero.hname=‘猪八戒‘
            hero.save()
            hero = HeroInfo.objects.get(hname=‘孙悟空‘)
            hero.hname = ‘孙行者‘
            hero.hcomment = ‘七十二变‘
            hero.save()
            update  使用模型类.objects.filter().update(),会返回受影响的行数
            HeroInfo.objects.filter(hname=‘沙悟净‘).update(hname=‘沙和尚‘)

            4 删除(删除有两种方法)
            1)模型类对象delete
            HeroInfo.objects.get(id=13).delete()
            2)模型类.objects.filter().delete()
            HeroInfo.objects.filter(id=14).delete()

            查询集 QuerySet 查询集,也称查询结果集、QuerySet,
            表示从数据库中获取的对象集合。
            当调用如下过滤器方法时,Django会返回查询集
            (而不是简单的列表):all():返回所有数据。filter():返回满足条件的数据。
            exclude():返回满足条件之外的数据。order_by():对结果进行排序。
            对查询集可以再次调用过滤器进行过滤,如
            print(BookInfo.objects.filter(bread__gt=30).order_by(‘bpub_date‘))

            测试自定义的管理器
            print(BookInfo.books.all())

            book = BookInfo.books.create_book(‘aabc‘, date(1988, 1, 1))

        except Exception as e:
            print("出错了")

        response = HttpResponse("register get page")
        return response

    def post(self, request):
        response = HttpResponse("register post page")
        return response

原文地址:https://www.cnblogs.com/marchpy/p/10371690.html

时间: 2024-08-28 19:07:30

django中对数据库的增删改查的相关文章

android中SQLite数据库的增删改查

1.数据库帮助类PersonSQLiteOpenHelper package com.wzw.sqllitedemo.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper

java程序设计课期中考试——数据库的增删改查和简单的js界面

首先是设计思路,对于数据库的增删改查,我们借助Ecilipse来进行前端和后端的编写.Ecilipse是可以进行java web项目的操作的. 前端,我们选择用使用jsp,所谓的jsp就是可以嵌入其他语言的html,各种标识语言和html语法一致,但为了在本界面检测各种信息的正确性,需要嵌入java的语句进行判断. 对于数据库的增删改查,我们使用sql语句,并且导入了相应的mysql的jar包,方便我们用java对数据库进行操作. 整体来说,我们编写使用了MVC模式(model-view-con

在java中对数据库进行增删改查(转)

1.java连接MySql数据库 代码区域: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 package com.oracle.jdbc.demo1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.S

Django 自带的ORM增删改查

通过Django来对数据库进行增删改查 1 首先创建类,在app应用程序里面的model模块里面创建类,写好数据库信息,方便我们待会初始化: 2 创建在django项目里面的settings里面添加app程序()在settings里面的INSTALLED_APPS里面) 3  python manage.py makemigrations     python manage.py migrate 拿models里面的一个类举例: class WebGroup(models.Model): nam

Django数据库的增删改查

通过一个实例学习Django数据库的增删改查 Django - 路由系统 url.py - 视图函数 views.py - 数据库操作 models.py - 模板引擎渲染 - HttpReponse(字符串) - render(request,'/path/a.html',{'name':'root'}) 一.示例:用户基本CURD 1.数据库设计 id hostname ip port status 2.功能的实现 创建  project (pycharm) django-admin sta

django之创建第8-1个项目-数据库之增删改查/数据库数据显示在html页面

1.为test.DB数据库预先创建下面数据 1    张三    16    2015-01-02    12    李四    17    2015-01-04    13    王五    14    2015-04-24    0 2.配置C:\djangoweb\helloworld\blog\urls.py文件 # -*- coding: UTF-8 -*- from django.conf.urls import patterns, include, url urlpatterns

TP框架中 数据库的增删改查

框架会用到数据库的内容,这一篇就是关于数据库的增删改查. 数据库的操作,无疑就是连接数据库,然后对数据库中的表进行各种查询,然后就是对数据的增删改的操作, 想要操作数据库,第一步必然是要:链接数据库 一.链接数据库 (1)找到模块文件夹中的Conf文件夹,然后进行编写config.php文件 我这里是这样的文件路径 (2)打开这个config.php文件,然后找到父类配置文件convention.php文件,将关于"数据库"的部分复制粘贴到config.php配置文件中(父类的conv

用CI框架向数据库中实现简单的增删改查

以下代码基于CodeIgniter_2.1.3版 用PHP向数据库中实现简单的增删改查(纯代码)请戳 http://www.cnblogs.com/corvoh/p/4641476.html CodeIgniter_2.1.3与PHP5.6的兼容问题请戳 http://www.cnblogs.com/corvoh/p/4649357.html 增: //insert//语法:$bool=$this->db->insert('表名',关联数组); $data=array( 'username'=

用PHP向数据库中实现简单的增删改查(纯代码,待完善)

<?php $con = mysql_connect("localhost:3306","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("test", $con); $result = mysql_query("SELECT * FROM user"); echo "