欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

【Django】ORM与Model

时间:2023-08-19
什么是ORM

Object Relational Mapping,即对象关系映射

使得Python编程人员不用直接编写SQL代码,可以像操作对象一样仅用Python语言操作数据库中的数据

Model

模型用于描述数据,它包含了储存的数据的重要字段和行为。

每个模型都是一个 Python 的类,这些类继承了 django.db.models.Model

每一个模型都映射一张数据库表

模型类的每个属性都相当于一个数据库的字段常用类型及属性介绍

函数名

类型

示例

通用属性

models.IntegerField()

整型

(-2147483648,2147483647)

primary_key

设置主键

True

null

值是否为null

True/False

blank

值是否为空

True/False

default

默认值

verbose_name

admin中显示的名字

db_column

数据库字段名

unique

唯一索引

True

db_index

普通索引

True

models.SmallIntegerField()

短整型

(-32768,32767)

models.BigIntegerField()

长整型

models.PositiveIntegerField()

正整型

(0,2147483647)

models.PositiveSmallIntegerField()

短正整型

(0,32768)

models.CharField()

字符串

'aqin'

max_length

字段长度

models.FloatField()

浮点型

8.88

models.DecimalField()

十进制小数

8.88888

max_digits

数字中允许的最大位数

decimal_places

存储的十进制位数

models.BooleanField()

布尔型

True/False

models.NullBooleanField()

可为空布尔型

True/False/None

models.TextField()

文本

'hello aqin'

models.EmailField()

邮箱

'12345678@qq.com'

models.UrlField()

网址

'http://www.xxx.com'

models.DateField()

日期

(年-月-日 )

2022-02-02

auto_now

时间自动添加

True

auto_now_add

时间自动添加(仅在创建的时候添加一次)

True

models.DateTimeField()

日期

(年-月-日 时:分:秒)

2022-02-02 12:12:12

models.TimeField()

日期

(时:分:秒)

12:12:12

models.ImageField()

图片

width_field

图片宽

height_field

图片高

upload_to

上传图片的本地路径

models.FileField()

文件

任意文件类型

upload_to

上传文件的本地路径

实践 1、创建数据库模型

models.py中的代码:

from django.db import models# 基于类的数据库模型# 继承内置的ORM(models.Model)class User(models.Model):id = models.IntegerField(primary_key=True)name = models.CharField(max_length=20, unique=True, blank=False)age = models.IntegerField(default=0)phone_number = models.EmailField(blank=True, default='')# 创建时添加created_time = models.DateTimeField(auto_now_add=True)# 更新时变更时间modified_time = models.DateTimeField(auto_now=True)

2、创建迁移脚本文件

查找所有可用的模型,为任意一个在数据库中不存在对应数据表的模型创建迁移脚本文件

python manage.py makemigrations

(tutorial-env) aqin1012@aqin1012deMBP mysite % python manage.py makemigrationsMigrations for 'app':app/migrations/0001_initial.py- Create model User

3、创建数据库表

运行上一步python manage.py makemigrations生成的迁移脚本来自动创建数据库表

python manage.py migrate

(tutorial-env) aqin1012@aqin1012deMBP mysite % python manage.py migrateOperations to perform:Apply all migrations: admin, app, auth, contenttypes, sessionsRunning migrations:Applying contenttypes.0001_initial..、OKApplying auth.0001_initial..、OKApplying admin.0001_initial..、OKApplying admin.0002_logentry_remove_auto_add..、OKApplying admin.0003_logentry_add_action_flag_choices..、OKApplying app.0001_initial..、OKApplying contenttypes.0002_remove_content_type_name..、OKApplying auth.0002_alter_permission_name_max_length..、OKApplying auth.0003_alter_user_email_max_length..、OKApplying auth.0004_alter_user_username_opts..、OKApplying auth.0005_alter_user_last_login_null..、OKApplying auth.0006_require_contenttypes_0002..、OKApplying auth.0007_alter_validators_add_error_messages..、OKApplying auth.0008_alter_user_username_max_length..、OKApplying auth.0009_alter_user_last_name_max_length..、OKApplying auth.0010_alter_group_name_max_length..、OKApplying auth.0011_update_proxy_permissions..、OKApplying auth.0012_alter_user_first_name_max_length..、OKApplying sessions.0001_initial..、OK

完成撒花

ps:本文主要参考Django官方文档[笔芯.gif][笔芯.gif][笔芯.gif]

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。