ORM模型
- 对象关系型映射,通过类的方式进行操作数据库。
- ORM 在执行对象操作的时候,会将对应的操作转化成原生的SQL语句进行操作。
Django
# 类继承自 models.Model
from django.db import models
# 创建数据模型,对应一张数据库中的表
class Book(models.Model):
id = models.AutoField()
name = models.CharField(max_length=100)
author = models.CharField(max_length=100)
price = models.FloatField()
# 对模型中的对象进行操作
book = Book(name="Python",author="桂树",price=89)
# save 方法保存
book.save()
# delete 方法,删除
book.delete()
映射模型到数据库中
- settings.py中,配置 DATABASES,做好数据库相关配置
- 在app中 models.py中定义好模型,模型继承自 django.db.models
- 将 app 添加到 settings.py 的 INSTALLED_APP中
- 在命令行终端,进入项目所在路径,然后执行命令 python manage.py makemigrations 生成迁移脚本文件
- 同样在命令行,再执行 python manage.py migrate 来将迁移脚本文件映射到数据库中
数据增删改查
from django.http import HttpResponse
from .models import Book
# 增填数据
def index(request):
book = Book(title="python",author="lcl",price=80)
book.save()
return HttpResponse("success")
# 数据查询
def index(request):
# 查询所有
book = Book.objects.all()
# 主键查询
book = Book.objects.get(id=1)
# 根据条件查询 filter 过滤
book = Book.objects.filter(title="java")
return HttpResponse("success")
# 修改数据
def index(request):
book = Book.objects.get(id=5)
book.title="php"
book.save()
return HttpResponse("success")
常用字段
字段 | 字段解析 |
---|---|
AutoField | 映射到数据库中是int类型,自动增长 |
BigAutoField | 类似于AutoField、范围较大 |
BooleanField | 在模型层面接收的是True/Fals |
CharField | 在数据库层面是varchar类型,必须要指定最大的长度max_length |
DateTimeField | 日期时间类型,不仅仅可以存储日期,还可以存储时间。映射到数据库中是datetime类型 |
EmailField | 类似于CharField。在数据库底层也是一个varchar类型 |
FileField | 用来存储文件的 |
ImageField | 用来存储图片文件的 |
FloatField | 浮点类型。映射到数据库中是float类型 |
IntegerField | 整形。值的区间是-2147483648——2147483647 |
BigIntegerField | 大整形。值的区间是-9223372036854775808——9223372036854775807。 |
PositiveIntegerField | 正整形。值的区间是0——2147483647 |
SmallIntegerField | 小整形。值的区间是-32768——32767。 |
PositiveSmallIntegerField | 正小整形。值的区间是0——32767 |
TextField | 大量的文本类型。映射到数据库中是longtext类型。 |
UUIDField | 只能存储uuid格式的字符串。uuid是一个32位的全球唯一的字符串,一般用来作为主键。 |
URLField | 类似于CharField,只不过只能用来存储url格式的字符串。并且默认的max_length是200。 |
Field常用参数
参数 | 含义 |
---|---|
null | 如果设置为True,映射的时候指定为空,默认为Flase |
db_column | 这个字段在数据库中的名字。如果没有设置这个参数,那么将会使用模型中属性的名字 |
default | 默认值。可以为一个值,或者是一个函数,但是不支持lambda表达式。并且不支持列表/字典/集合等可变的数据结构 |
primary_key | 是否为主键。默认是False。 |
unique | 在表中这个字段的值是否唯一。一般是设置手机号码/邮箱等。 |
模型中Meta配置
- 对于一些模型级别的配置。我们可以在模型中定义一个类,叫做Meta。然后在这个类中添加一些类属性来控制模型的作用。比如我们想要在数据库映射的时候使用自己指定的表名,而不是使用模型的名称。那么我们可以在Meta类中添加一个db_table的属性
class Book(models.Model):
name = models.CharField(max_length=20,null=False)
desc = models.CharField(max_length=100,name='description',db_column="description1")
class Meta:
db_table = 'book_model'
ordering = ['pub_date'] # 正序
ordering = ['-pub_date'] # 倒序