美文网首页
day08-mysql

day08-mysql

作者: wenyilab | 来源:发表于2020-01-29 22:03 被阅读0次

    1、安装命令

    brew install mysql
    

    2、安装后启动mysql

    mysql.server start
    

    3、执行安全设置

    mysql_secure_installation
    

    4、root密码

    password
    

    5、登陆mysql

    mysql -uroot -p
    

    6、创建数据库

    create database dj charset=utf8;
    

    7、使用数据库

    use dj;
    

    8、查看数据表

    show tables;
    

    9、建立项目,应用,注册应用
    10、改变数据库

    DATABASES = {
        'default': {
            # 'ENGINE': 'django.db.backends.sqlite3',
            'ENGINE': 'django.db.backends.mysql',
            # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'NAME': 'dj', # 数据库名称,必须手动创建
            'USER': 'root', # 用户名
            'PASSWORD': 'password', # 密码
            'HOST': 'localhost', # ip地址
            'PORT': 3306, # 端口号
        }
    }
    

    11、安装pymysql

    pip install pymysql
    

    12、导入pymysql

    import pymysql
    pymysql.install_as_MySQLdb()
    

    13、模型类

    class BookInfo(models.Model):
        '''图书模型类'''
        # 图书名
        btitle = models.CharField(max_length=20)
        # 出版日期
        bpub_date = models.DateField()
        # 阅读量
        bread = models.IntegerField(default=0)
        # 评论量
        bcomment = models.IntegerField(default=0)
        # 删除标记
        isDelete = models.BooleanField(default=False)
    
    
    class HeroInfo(models.Model):
        '''英雄模型类'''
        # 英雄名
        hname = models.CharField(max_length=20)
        # 性别
        hgender = models.BooleanField(default=False)
        # 备注
        hcomment = models.CharField(max_length=128)
        # 关系属性
        hbook = models.ForeignKey('BookInfo',on_delete=models.CASCADE)
        # 删除标记
        isDelete = models.BooleanField(default=False)
    

    生成迁移文件

    python manage.py makemigrations
    

    执行迁移

    python manage.py migrate
    

    14、查看数据库

    show tables;
    desc booktest_bookinfo;
    desc booktest_heroinfo;
    

    15、建立测试数据

    insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values
    ('射雕英雄传','1980-5-1',12,34,0),
    ('天龙八部','1986-7-24',36,40,0),
    ('笑傲江湖','1995-12-24',20,80,0),
    ('雪山飞狐','1987-11-11',58,24,0);
    
    bookinfo
    insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
    ('郭靖',1,1,'降龙十八掌',0),
    ('黄蓉',0,1,'打狗棍法',0),
    ('黄药师',1,1,'弹指神通',0),
    ('欧阳锋',1,1,'蛤蟆功',0),
    ('梅超风',0,1,'九阴白骨爪',0),
    ('乔峰',1,2,'降龙十八掌',0),
    ('段誉',1,2,'六脉神剑',0),
    ('虚竹',1,2,'天山六阳掌',0),
    ('王语嫣',0,2,'神仙姐姐',0),
    ('令狐冲',1,3,'独孤九剑',0),
    ('任盈盈',0,3,'弹琴',0),
    ('岳不群',1,3,'华山剑法',0),
    ('东方不败',0,3,'葵花宝典',0),
    ('胡斐',1,4,'胡家刀法',0),
    ('苗若兰',0,4,'黄衣',0),
    ('程灵素',0,4,'医术',0),
    ('袁紫衣',0,4,'六合拳',0);
    
    heroinfo

    16、视图函数

    from django.shortcuts import render,redirect
    from .models import BookInfo
    from datetime import date
    from django.http import HttpResponse,HttpResponseRedirect
    # Create your views here.
    
    
    def index(request):
        '''显示图书信息'''
        # 1、查询出所有图书信息
        books = BookInfo.objects.all()
    
        # 2、使用模版
        return render(request,'booktest/index.html',
                      {'books':books})
    
    def create(request):
        '''新增一本书'''
        # 1、创建BookInfo对象
        b = BookInfo()
        b.btitle = '流星蝴蝶剑'
        b.bpub_date = date(2020,1,20)
        # 2、保存进数据库
        b.save()
        # 3、返回应答,让浏览器再访问/index,重定向
        # return HttpResponseRedirect('/index')
        return redirect('/index')
    
    
    def delete(request,bid):
        '''删除点击的图书'''
        # 1、通过bid获取图书对象
        book = BookInfo.objects.get(id=bid)
        # 2、删除
        book.delete()
        # 3、重定向,让浏览器访问/index
        # return HttpResponseRedirect('/index')
        return redirect('/index')
    

    17、urls配置
    主路由

    from django.contrib import admin
    from django.urls import path
    from django.conf.urls import url,include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        url(r'^',include('booktest.urls'))
    ]
    

    子路由

    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^index/$',views.index),
        url(r'^create/$',views.create),
        url(r'^delete(\d+)$',views.delete),
    ]
    

    18、模版重定向

    # settings.py
    'DIRS': [os.path.join(BASE_DIR,'templates')],
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>图书信息</title>
    </head>
    <body>
    <a href="/create">新增</a>
    <ul>
        {% for book in books %}
            <li>{{ book.btitle }}--<a href="/delete{{ book.id }}">删除</a></li>
        {% endfor %}
    </ul>
    </body>
    </html>
    

    19、以上部分效果图


    result

    20、查询

    1、判等

    BookInfo.objects.get(id=1)
    

    2、模糊查询
    a)存在 传 的书名

    BookInfo.objects.filter(btitle__contains='传')
    

    b)以 部结尾的书名

    BookInfo.objects.filter(btitle__endswith='部')
    

    3、查询书名不为空

    select * from booktest_bookinfo where btitle is not null;
    BookInfo.objects.filter(btitle__isnull=False)
    

    4、范围查询 in
    查询id 为 1,3,5

    select * from booktest_bookinfo where id in (1,3,5);
    BookInfo.objects.filter(id__in=[1,3,5])
    

    5、比较查询 gt lt gte lte
    查询编号大于3的图书

    select * from booktest_bookinfo where id > 3;
    BookInfo.objects.filter(id_gt=3)
    

    6、日期查询
    a)查询1980年发表的图书

    BookInfo.objects.filter(bpub_date__year=1980)
    

    b)查询1980年1月1日后发表的图书

    from datetime import date
    BookInfo.objects.filter(bpub_date__gt=date(1980,1,1))
    

    7、不满足条件查询 exclude

    BookInfo.objects.exclude(id=3)
    

    8、排序
    a)查询所有图书信息,按照id从小到大进行排序

    BookInfo.objects.all().order_by('id')
    

    b)查询所有图书信息,按照id从大到小进行排序

    BookInfo.objects.all().order_by('-id')
    

    c)把id大于3的图书信息按照阅读量从小到大排序显示

    BookInfo.objects.filter(id__gt=3).order_by('-bread')
    

    9、Q对象
    作用:用于查询时条件之间的逻辑关系。not and or
    使用之前需要先导入:

    from django.db.models import Q
    

    a)查询id大于3且阅读量大于30的图书信息

    BookInfo.objects.filter(id__gt=3,bread__gt=30)
    BookInfo.objects.filter(Q(id__gt=3)&Q(bread__gt=30))
    

    b)查询id大于3或者阅读量大于30的图书信息

    BookInfo.objects.filter(Q(id__gt=3)|Q(bread__gt=30))
    

    c)查询id不等于3的图书信息

    BookInfo.objects.filter(~Q(id=3))
    

    10、F对象
    作用:用于类属性之间的比较
    使用之前需要导入:

    from django.db.models import F
    

    a)查询图书阅读量大于评论量的图书信息

    BookInfo.objects.filter(bread__gt=F('bcomment'))
    

    b)查询图书阅读量大于2倍评论量图书信息

    BookInfo.objects.filter(bread__gt=F('bcomment')*2)
    

    11、聚合函数
    作用:对查询结果进行聚合操作
    sum count avg max min
    aggregate: 调用这个函数使用聚合,返回是一个字典
    使用之前需先导入:

    from django.db.model import Sum,Count,Max,Min,Avg
    

    a)查询所有图书数目

    BookInfo.objects.all().aggregate(Count('id'))
    {'id_count':3}
    

    b)查询所有图书阅读量的总和

    BookInfo.objects.aggregate(Sum('bread'))
    

    c)统计所有图书的数目

    BookInfo.objects.count()
    返回是数字
    

    d)统计id大于3的所有图书数目

    BookInfo.objects.filter(id__gt=3).count()
    

    12、查询集
    1)惰性查询,只有真正发生查询时才会查询
    2)缓存,当使用的是同一个查询集时,第一次查询会发生数据库查询,之后再使用这个查询集时,使用的是缓存的结果
    限制查询集:可以进行切片操作,下标不能为负数
    exists:判断一个查询集是否有数据

    相关文章

      网友评论

          本文标题:day08-mysql

          本文链接:https://www.haomeiwen.com/subject/snfbthtx.html