美文网首页
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

    1、安装命令 2、安装后启动mysql 3、执行安全设置 4、root密码 5、登陆mysql 6、创建数据库 7...

  • Java学习-Day08-MySQL与JDBC编程(2)

    1.SQL语句 1.1 索引 索引是存放在模式中的一个数据库对象,虽然索引总是从属于数据表,但它也和数据表一样属于...

网友评论

      本文标题:day08-mysql

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