ORM
ORM(对象关系映射)
1. 映射的关系 数据表 <--> 类 数据行 <--> 对象 字段 <--> 属性
2. Django项目使用MySQL数据库
1. 手动创建数据库 2. 配置数据库的连接信息,settings.py 配置 DATABASES 这个配置项 3. 用pymysql代替默认的MySQLdb
在settings.py同目录下的__init__.py文件中 import pymysql pymysql.install_as_MySQLdb()
4. models.py中创建模型(类) 5. 执行两条命令 1. python manage.py makemigrations --> 将models.py中的改动登记到小本本上 2. python manage.py migrate --> 将改动翻译成SQL语句,去数据库执行
3. 数据库的表之间的关系
1. 外键(ForeignKey) --> 一对多(多对一)
2. 多对多(ManyToManyField) --> 通过第三张表建立多对多的关系
4. 数据库的操作(增删改查)
1. 单表操作:1. models.类名.objects.all() --> 查所有 2. models.类名.objects.get(id=1) --> 根据id查单条数据 3. models.类名.objects.get(id=1).delete() --> 删除单条数据 4. 修改 obj = models.类名.objects.get(id=1) obj.name = "新名字" obj.save()
5. 新增models.类名.objects.create(name="张曌")
2. 外键的操作
# 书籍
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增的主键
title = models.CharField(max_length=32) # 书籍名称 varchar(32)
publisher = models.ForeignKey(to=Publisher) # 外键关联Publisher这张表
book_obj --> 表示一本书的对象
book_obj.id / book_obj.title
book_obj.publisher --> 和我关联的出版社对象
book_obj.publisher_id --> 和我关联的出版社的ID值
3. 多对多的操作
# 作者表
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16)
# ORM创建多对多字段,会自动在数据库中创建第三张表
books = models.ManyToManyField(to=Book)
author_obj --> 一个作者对象
author_obj.books.all() --> 作者出版的所有书(书籍对象的列表)
author_obj.books.set([1,2,3])--> 设置作者关联的书籍(更新的是第三张表)
Django 中 ORM相关操作
1. ORM字段和字段参数
1. AutoField
2. CharField
3. ForeignKey
4. ManyToManyField
2. ORM标语表之间的关系
1. 外键关联
2. 一对一
3. 多对多
1. 使用ManyToManyField() --> ORM自动帮我创建第三张表
2. 手动创建第三张表
3. 手动创建第三张表并设置ManyToManyField(),指定
books = models.ManyToManyField(
to="Book",
through="Book2Author",
through_fields=('author', 'book'))
3. ORM查询操作必知必会13条
filter()支持 双下划线 操作!
总结一下:
1. 返回QuerySet类型的都有哪一些
1. all() 查询得到全部结果
2. filter() 得到筛选包含匹配到的对象
3. exclude() 得到除匹配到对象外的所有对象
4. order_by() 查询结果排序,取反的话在查询条件前加-
5. reverse() 查询结果反转排序
6. distinct() 去重
7. values() 得到QuerySet对象的一个字典
8. values_list() 结果生成的列表
2. 返回具体对象:
1. get() 得到具体对象
2. first() 最开始的一个对象
3. last() 最后一个对象
3. 返回具体数字:
count() 具体数字,计数
4. 返回布尔值的:
exists() 判断是否存在返回具体布尔值