1.配置

1.使用MySQL数据库首先需要安装驱动程序

pip install PyMySQL
2.在Django的工程同名子目录的__init__.py文件中添加如下语句
from pymysql import install_as_MySQLdb
install_as_MySQLdb()

2.定义模型类

  • 创建应用,并在models.py文件中定义模型类

class ***(models.Model)
属性=models.类型(选项)
外键=models.FK(模型类名称)
class Meta:
db_table=表名称
类型:分为数字、字符串、日期时间
选项:mysql中的约束

  • 映射关系

3.迁移

  • 1生成迁移文件:

python manage.py makemigrations

  • 2.同步到数据库:

python manage.py migrate

注意:makemigrationsmigrate 不要拼错

数据库操作—增、删、改、查

1.增加:

①save:
  • 对象.save()
book = BookInfo()
 book.btitle = '西游记'
 book.bpub_date = date(2019, 7, 1)
 book.bread = 10
 book.save()
②create
  • 模型类.objects.create()
book = BookInfo.objects.create(
btitle='红楼梦',
bpub_date=date(2019, 7, 2)
)

2.删除

①模型类对象delete:
  • 查询,对象.delete()

hero = HeroInfo.objects.get(id=13)
hero.delete()

②模型类**.objects.filter().**delete()
  • 模型类.objects.create()

:HeroInfo**.objects.filter(id=14).**delete()

3.修改

①save:
  • 修改模型对象的属性,然后执行save()方法
  • 查询,赋值,对象.save()

hero = HeroInfo.objects.get(hname=‘猪八戒’)
hero.hname = ‘猪悟能’
hero.save()

②update:
  • 使用模型类.objects.filter().update(),会返回受影响的行数
  • 模型类.objects.filter().update()

HeroInfo.objects.filter(hname=‘沙悟净’).update(hname=‘沙僧’)

4.查询

基本查询

①get::
  • 模型类**.objects.**get(条件)
  • 查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。如果查询到多个结果,会抛出异常.

BookInfo.objects.get(id=3)

②filter::
  • 模型类**.objects.**filter(条件)
  • 过滤出多个结果

BookInfo.objects.filter(id=3)

③all
  • 模型类**.objects.**all()
  • 查询所有数据

BookInfo.objects.all()

过滤查询

①相等
  • exact:表示判等
    例:例:查询编号为1的图书。

BookInfo.objects.filter(id__exact=1)
可简写为:
BookInfo.objects.filter(id=1)

②模糊查询
  • contains:是否包含。
    例:查询书名包含’传’的图书。

BookInfo.objects.filter(btitle__contains=‘传’)

  • startswith、endswith:以指定值开头或结尾。
    例:查询书名以’部’结尾的图书

BookInfo.objects.filter(btitle__endswith=‘部’)

③空查询
  • isnull:是否为null。
    例:查询书名不为空的图书。

BookInfo.objects.filter(btitle__isnull=False)

④范围查询
  • in:是否包含在范围内。
    例:查询编号为1或3或5的图书

BookInfo.objects.filter(id__in=[1, 3, 5])

⑤比较查询
  • gt 大于 (greater then)
  • gte 大于等于 (greater then equal)
  • lt 小于 (less then)
  • lte 小于等于 (less then equal)
    例:查询编号大于3的图书

BookInfo.objects.filter(id__gt=3)

⑥日期查询
  • year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。
    例:查询1980年发表的图书。

BookInfo.objects.filter(bpub_date__year=1980)

例:查询1980年1月1日后发表的图书。

BookInfo.objects.filter(bpub_date__gt=date(1990, 1, 1))

类型:
F():两个属性的比较
例:查询阅读量大于等于评论量的图书。

from django.db.models import F
BookInfo.objects.filter(bread__gte=F(‘bcomment’))

Q():实现逻辑或、非
例:查询阅读量大于20,并且编号小于3的图书。

BookInfo.objects.filter(bread__gt=20,id__lt=3)

BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)

聚合类型,如Avg,Sum,Max,Min
例:查询图书的总阅读量

from django.db.models import Sum
BookInfo.objects.aggregate(Sum(‘bread’))

排序

BookInfo.objects.all().order_by(‘bread’) # 升序
BookInfo.objects.all().order_by(’-bread’) # 降序

关系过滤查询

关联查询
  • 由一到多的访问语法:
    一对应的模型类对象.多对应的模型类名小写_set 例:

b = BookInfo.objects.get(id=1)
b.heroinfo_set.all()

  • 由多到一的访问语法:
    多对应的模型类对象.多对应的模型类中的关系类属性名 例:

h = HeroInfo.objects.get(id=1)
h.hbook

关联过滤查询
  • 由多模型类条件查询一模型类数据:
    语法如下:

关联模型类名小写__属性名__条件运算符=值

例:查询图书,要求图书英雄为"孙悟空"

BookInfo.objects.filter(heroinfo__hname=‘孙悟空’)

查询图书,要求图书中英雄的描述包含"八"

"BookInfo.objects.filter(heroinfo__hcomment__contains=‘八’)

  • 由一模型类条件查询多模型类数据:
    语法如下:

一模型类关联属性名__一模型类属性名__条件运算符=值

查询书名为“天龙八部”的所有英雄。

HeroInfo.objects.filter(hbook__btitle=‘天龙八部’)

查询图书阅读量大于30的所有英雄

HeroInfo.objects.filter(hbook__bread__gt=30)