【Django】ORM与Model

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 【Django】ORM与Model,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

什么是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. 创建数据库模型

【Django】ORM与Model

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

完成撒花🎉🎉🎉

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135455.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!