什么是ORM
Object Relational Mapping,即对象关系映射
使得Python编程人员不用直接编写SQL代码,可以像操作对象一样仅用Python语言操作数据库中的数据
Model
模型用于描述数据,它包含了储存的数据的重要字段和行为。
- 每个模型都是一个 Python 的类,这些类继承了 django.db.models.Model
- 每一个模型都映射一张数据库表
- 模型类的每个属性都相当于一个数据库的字段
常用类型及属性介绍
函数名 |
类型 |
示例 |
通用属性 |
|
models.IntegerField() |
整型 |
(-2147483648,2147483647) |
|
|
models.SmallIntegerField() |
短整型 |
(-32768,32767) |
||
models.BigIntegerField() |
长整型 |
|||
models.PositiveIntegerField() |
正整型 |
(0,2147483647) |
||
models.PositiveSmallIntegerField() |
短正整型 |
(0,32768) |
||
models.CharField() |
字符串 |
'aqin' |
|
|
models.FloatField() |
浮点型 |
8.88 |
||
models.DecimalField() |
十进制小数 |
8.88888 |
|
|
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 |
|
|
models.DateTimeField() |
日期 (年-月-日 时:分:秒) |
2022-02-02 12:12:12 |
||
models.TimeField() |
日期 (时:分:秒) |
12:12:12 |
||
models.ImageField() |
图片 |
|
||
models.FileField() |
文件 |
任意文件类型 |
|
实践
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 makemigrations
Migrations 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 migrate
Operations to perform:
Apply all migrations: admin, app, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying app.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
完成撒花