Django 数据库模型操作+迁移+设置

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