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() 判断是否存在返回具体布尔值

posted @ 2018-06-20 19:26  tianyu105529  阅读(83)  评论(0编辑  收藏  举报