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