init
import pymysql pymysql.install_as_MySQLdb()
setting
DATABASES = {
'default': {
# engine 引擎
'ENGINE': 'django.db.backends.mysql',
'HOST':'*********', #主机
'PORT':'3306', #端口号
'USER':'***', #用户名
'PASSWORD':'***', #密码
'NAME': '****', #指定数据库
}
}
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
views
from django.shortcuts import render
from django.http import HttpResponse
from book.models import BookInfo
# Create your views here.
def index(request):
#1.到数据库中查找数据
books=BookInfo.objects.all()
###组织数据
context= {
'books':books
}
## 传递模板
return HttpResponse('index',context)
'''
类似于 ipython的东西
python manage.py shell
'''
##############新增数据###############
####需要手动save保存
# from book.models import BookInfo
# book=BookInfo(
# name = 'python入门',
# pub_date = '2000-01-01'
# )
# book.save()
# ##########方式2:直接入库##
# from book.models import BookInfo
# BookInfo.objects.create(
# name = 'java',
# pub_date = '2005-01-01'
# )
# #######方式1:修改(更新)数据#######
# from book.models import BookInfo
# #1.查询数据
# #select * from bookinfo where id=1
# book = BookInfo.objects.get(id=1)
# ##2.直接修改实例的属性
# book.readcount=20
# book.save
# #######方式2:修改(更新)数据#######
# from book.models import BookInfo
# BookInfo.objects.filter(id=1).update(
# readcount=99,
# commentcount=200
# )
############删除##########
##1.查询出数据
# from book.models import BookInfo
# book=BookInfo.objects.get(id=6)
# book.delete()
# book.save()
#######删除方式2########
# BookInfo.objects.filter(id=6).delete()
########基本查询############
# get 得到某一个数据 返回一个对象
# all 获取所有的结果 列表
# count 个数
#select * from bookinfo where id=1
# 返回一个对象
# book=BookInfo.objects.get(id=1)
#查询id 不存在的数据会抛出异常
# book=BookInfo.objects.get(id=100)
"""
book.models.DoesNotExist: BookInfo matching query does not exist.
"""
# try:
# book=BookInfo.objects.get(id=2)
# # except Exception :
# # pass
# except BookInfo.DoesNotExist:
# pass
# 返回所有结果,列表
# BookInfo.objects.all()
# count
# BookInfo.objects.all().count()
# BookInfo.objects.count()
# ###############################filter,get,exclude#####################################
#
# """
# select name from bookinfo where 条件语句
# 相当于 where查询
#
# filter : 筛选/过滤 返回 n个结果 (n = 0/1/n)
# get : 返回1个结果
# exclude : 排除掉符合条件剩下的结果 相当于 not
#
# 语法形式:
# 以filter(字段名__运算符=值) 为例
#
# """
# # 查询编号为1的图书
# # exact 精确的 准确的 就是等于
#get返回的是单一对象
# BookInfo.objects.get(id__exact=1)
# BookInfo.objects.get(id=1)
##filter返回的是列表
# BookInfo.objects.filter(id=1)
# BookInfo.objects.filter(id__exact=1)
# # 查询书名包含'湖'的图书
# # contains 包含
# BookInfo.objects.filter(name__contains='湖')
# # 查询书名以'部'结尾的图书
# BookInfo.objects.filter(name__endswith='部')
# # 查询书名为空的图书
# BookInfo.objects.filter(name__isnull=True)
# # 查询编号为1或3或5的图书
# BookInfo.objects.filter(id__in=[1,3,5])
# # 查询编号大于3的图书
# # gt 大于 great 大
# # gte 大于等于 e equal 等于
# # lt 小于 less than
# # lte 小于等于
# BookInfo.objects.filter(id__gt=3)
#
# # 查询书籍id不为3的图书
# BookInfo.objects.exclude(id__exact=3)
# BookInfo.objects.exclude(id=3)
#
# # 查询1980年发表的图书
# BookInfo.objects.filter(pub_date__year='1980')
#
# # 查询1990年1月1日后发表的图书
# BookInfo.objects.filter(pub_date__gt='1990-1-1')
#
# # BookInfo.objects.filter(pub_date__gt='1990.1.1') #错误的
# ###############################F(了解)#####################################
#
#
# #两个属性怎么比较 F对象
# """
# F对象的语法形式
#
# filter(字段名__运算符=F('字段名'))
#
#
# """
# from django.db.models import F
# #查询阅读量大于等于评论量的图书
# BookInfo.objects.filter(readcount__gte=F('commentcount'))
#
#
# #查询阅读量大于等于评论量2倍的图书
# BookInfo.objects.filter(readcount__gte=F('commentcount')*2)
# ###############################Q对象(了解)#####################################
#
# # 需要查询id大于2 并且阅读量大于20的书籍
# #方式1
# # filter().filter()
# BookInfo.objects.filter(id__gt=2).filter(readcount__gt=20)
#
# #方式2
# # filter(条件,条件)
# BookInfo.objects.filter(id__gt=2,readcount__gt=20)
#
# # 需要查询id大于2 或者 阅读量大于20的书籍
#
# from django.db.models import Q
#
# """
# Q(字段名__运算符=值)
#
# 或 Q()|Q() ..
# 并且 Q()&Q() ..
# not ~Q()
# """
# BookInfo.objects.filter(Q(id__gt=2)|Q(readcount__gt=20))
#
# # 查询书籍id不为3
# BookInfo.objects.exclude(id=3)
#
# BookInfo.objects.filter(~Q(id=3))
# ###############################聚合函数(了解)#####################################
#
# """
#和,最大,最小,平均,个数
# Sum,Max,Min,Avg,Count
#
# 聚合函数需要使用 aggregate
# 语法形式是: aggragte(Xxx('字段'))
# """
# # 当前数据的阅读总量
# from django.db.models import Sum,Avg,Max,Min,Count
# BookInfo.objects.aggregate(Sum('readcount'))
#
#
#
# ###############################排序#####################################
# # 默认升序
# BookInfo.objects.all().order_by('readcount')
# #降序
# BookInfo.objects.all().order_by('-readcount')
#
#
#
# ###############################关联查询#####################################
# """
# 书籍和人物的关系是 1:n
# 书籍 中没有任何关于人物的字段
#
# 人物 中有关于书籍的字段 book 外键
#
# 语法形式
#
# 通过书籍查询人物信息( 已知 主表数据,关联查询从表数据)
#
# 主表模型(实例对象).关联模型类名小写_set.all()
#
#
#
# 通过人物查询书籍信息( 已知 从表数据,关联查询主表数据)
#
# 从表模型(实例对象).外键
#
# 查询书籍为1的所有人物信息
# 查询人物为1的书籍信息
# """
#
# # 查询书籍为1的所有人物信息
#
# # 通过书籍 查询人物
#
# #1.查询书籍
# book=BookInfo.objects.get(id=1)
# #2.根据书籍关联人物信息
# book.peopleinfo_set.all()
#
# #查询人物为1的书籍信息
#
# # 根据书籍 查询人物
# from book.models import PeopleInfo
# #1.查询人物
# person=PeopleInfo.objects.get(id=1)
# #2.根据人物关联查询书籍
# # person.book 实例对象
# person.book
# person.book.name
#
#
# ###############################关联查询的筛选#####################################
# """
# 书籍和人物的关系是 1:n
# 书籍 中没有任何关于人物的字段 (不要考虑隐藏的哪个字段)
#
# 人物 中有关于书籍的字段 book 外键
#
# 语法形式
#
# 我们需要的是 书籍信息,已知条件是 人物信息
# 我们需要的是 主表数据,已知条件是 从表信息
#
# filter(关联模型类名小写__字段__运算符=值)
#
#
# 我们需要的是 人物信息,已知条件是 书籍信息
# 我们需要是是 从表数据,已知条件是 主表信息
#
# filter(外键__字段__运算符=值)
#
# """
# """
# 查询图书,要求图书人物为"郭靖"
# 查询图书,要求图书中人物的描述包含"八"
# """
#
# #需要的是图书,条件是人物
# BookInfo.objects.filter(peopleinfo__name__exact='郭靖')
# BookInfo.objects.filter(peopleinfo__name='郭靖')
#
# BookInfo.objects.filter(peopleinfo__description__contains='八')
#
# """
# 查询书名为“天龙八部”的所有人物
# 查询图书阅读量大于50的所有人物
# """
# PeopleInfo.objects.filter(book__name='天龙八部')
# PeopleInfo.objects.filter(book__name__exact='天龙八部')
#
# PeopleInfo.objects.filter(book__readcount__gt=50)
# # 射雕,雪山
#
# ###############################查询集#####################################
models
from django.db import models
# Create your models here.
"""
1. ORM
表 --> 类
字段 --> 属性
2. 模型类需要继承自models.Model
3. 模型类会自动为我们添加(生成)一个主键
4. 属性名=属性类型(选项)
属性名: 不要使用 python,mysql关键字
不要使用 连续的下划线(__)
属性类型: 和mysql的类型类似的
选项: charfiled 必须设置 max_length
varchar(M)
null 是否为空
unique 唯一
default 设置默认值
verbose_name 主要是 admin后台显示
"""
"""
书籍表:
id,name,pub_date,readcount,commentcount,is_delete
"""
class BookInfo(models.Model):
# 属性名=属性类型(选项),######unique=True 不能重复
name=models.CharField(max_length=10,unique=True,verbose_name='名字')
#发布日期 (null=True)允许为空
pub_date=models.DateField(null=True)
#阅读量 default=0 默认为0
readcount=models.IntegerField(default=0)
#评论量default=0 默认为0
commentcount=models.IntegerField(default=0)
#是否逻辑删除 default=False
is_delete=models.BooleanField(default=False)
# django 自动为我们添加了一个属性 这个属性就可以通过 书籍查询人物信息
# peopleinfo_set
class Meta:
# 改表名
db_table='bookinfo'
# 修改后台admin的显示信息的配置
verbose_name='admin'
def __str__(self):
return self.name