django-orm 入门

一、django中的orm 概述

全名: 对象-关系-映射 (Object-Relational-Mapping 简称ORM)

1 ORM与DB(数据库)的映射关系

ORM DB
属性 字段
对象 数据记录行

2 ORM属性/表字段

Django 把表模型定义为 Model,他需要继承自django.db.models中的 Model 类,只要是与数据表相关的操作,都需要继承这个类。同时ORM 对于数据库的的增删改查,也提供了一些简单的 API(Application Programming Interface 应用程序编程接口),例如 F 查询、Q 查询。

针对数据库中的字段类型,Django ORM 都有对应的 “xxxField” 来表述,见如下表格:字段类型表

字段 说明 字段属性
AutoFiled 默然自增主键(Primary_key=Ture),Django 默认建立id字段为主键。
CharFiled 字符类型 Max_length=32,字符长度必须明确
IntgerFiled 整型 int
DateFiled 年月日时间类型 auto_now=True,数据被更新就会更新时间 ;auto_now_add=True,数据第一次参数时产生。
DateTimeFiled 年月日小时分钟秒时间类型 auto_now=True,数据被更新就会更新时间; auto_now_add=True,数据第一次参数时产生。
DecimalFiled 混合精度的小数类型 max_digits=3,限定数字的最大位数(包含小数位);decimal_places=2,限制小数的最大位数。
BooleanFiled 布尔字段,对应数据库 tinyint 类型数据长度只有1位。 值为True或False
TextFiled 用于大文本

3 queryset对象

  • queryset是查询集,就是传到服务器上的url里面的内容。Django会对查询返回的结果集QerySet进行缓存,这里是为了提高查询效率。

    也就是说,在你创建一个QuerySet对象的时候,Django并不会立即向数据库发出查询命令,只有在你需要用到这个QuerySet的时候才回去数据库查询

  • QuerySet 可以被构造,过滤,切片,做为参数传递,这些行为都不会对数据库进行操作。只要你查询的时候才真正的操作数据库。

  • 只有queryset对象才可以.query查看内部sql语句

# 只有queryset对象才可以.query查看内部sql语句
book = models.Books.objects.values_list('book_name')
    print(book)  # <QuerySet [('水浒传',), ('西游记',), ('红楼梦',),...>
    print(book.query)  # 查看内部的sql语句:SELECT `app01_books`.`book_name` FROM `app01_books`



二、基本使用

  • ORM 的增删改查称为 CURD 操作

1 表操作


1.1 创建表

from django.db import modelsclass # models
class UserInfo(models.Model):
    name = models.CharFiled(max_length=100)
    password = models.CharFiled(max_length=100)

2 记录操作


2.1 CURD--增删改查

每个继承自 models.Model 的模型类,都会有一个 objects 对象被同时继承下来,这个对象就叫做“管理器对象”,数据库的增删改查可以用 objects 管理器对象来实现

- 添加/插入记录

(1)create
UserInfo.objects.create(name='jay',password='abc123')
(2)save(批量)
  • 除了上述的create方法之外,还有另一种方法
  • 可以用于批量添加操作
  • 也可以直接修改数据行
Obj=UserInfo(name="jay",password="abc123")
Obj.name="john"  # name 属性值会被赋值为“john”,最后调用 `save()`方法保存
Obj.save()

- 常用查询语句

UserInfo.objects.all()  #查询表中的所有记录
UserInfo.objects.filter(name_contains='j')  #查询表中name含有“j”的所有记录,被使用较多
UserInfo.objects.get(name="john")  #有且只有一个查询结果,如果超出一个或者没有,则抛出异常
UserInfo.objects.getlist(name="john")  # key值相同,或者是一个key下有多个value值
UserInfo.objects.get(name="john").delete()  #删除名字为john的记录
UserInfo.objects.get(name="john").update(name='TOM')  #更新数据表的name为TOM

3 修改&删除记录

# 修改
UserInfo.objects.filter(name_contains='j').update(name='xxx',age=18)

# 删除
UserInfo.objects.filter(name_contains='j').delete()

4 数据迁移

4.1 迁移命令

  • 注意使用manage.py时所在路径,路径下要包含了manage.py文件
-python3 manage.py makemigrations  # 这条命令会在migrations创建一条记录,数据库变更记录
-python3 manage.py migrate         # 把更改同步到数据库

4.2 迁移删除

  • 有时数据出了错乱,或者就是想清空数据库,不能直接删表就算了,而要连迁移记录一起删除,即几个migrations文件
  • 注意不要删除了__init__.py文件
# 1 app下的migration文件

# 2 后台管理的迁移文件
from xadmin import migrations

# 3 如果用了AuthUser表,还有auth下的迁移文件
from django.contrib.auth.models import auth  # auth文件夹下的migration文件夹中出了`__init__.py`之外的文件
posted @ 2021-01-13 12:14  Eather‘s  阅读(231)  评论(0)    收藏  举报