学习笔记,仅供参考

参考自:Django打造大型企业官网–Huang Y;

本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列中,尽量详细的记录一下。


ORM模型

ORM模型介绍

ORM,全称Object Relational Mapping,中文叫做对象关系映射,通过ORM我们可以通过的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性ORM在执行对象操作的时候,最终还是会把对应的操作转换为数据库原生sql语句。

创建ORM模型

ORM模型一般放在appmodels.py文件中,每个app都可以拥有自己的模型,并且如果这个模型想要映射到数据库中,那么这个app必须要在settings.pyINSTALLED_APP中进行安装,下面是一个书籍ORM模型:

from django.db import models
class Book(models.Model):name = models.CharField(max_length=20,null=False)author = models.CharField(max_length=20,null=False)pub_time = models.DateTimeField(default=datetime.now)price = models.FloatField(default=0)

上面这个模型继承自django.db.models.Model类,如果这个模型想要映射到数据库中,就必须继承自这个类。

当这个模型映射到数据库中时,表名是模型名称的小写形式(book),在这个表中,有四个字段,一个为name,该字段保存书的名称,是varchar类型,最长不能超过20个字符,并且不能为空;第二个字段为作者姓名,同样也是varchar类型,长度不能超过20个;第三个为出版时间,是datetime类型,默认是保存这本书籍的时间;第五个字段是这本书的价格,为浮点类型。
还有一个字段为主键id,在django中,如果一个模型没有定义主键,那么将会自动生成一个自动增长int类型的主键,并且这个主键的名字就叫做id

映射模型到数据库中

下面我们用案例,学习一下这个知识点。

  • 创建数据库
create database mynewbook default charset utf8 collate utf8_general_ci;
  • 创建新项目
django-admin startproject newbookstore1
  • 创建新的应用
python manage.py startapp bookstore
  • settings.py中,配置DATABASESINSTALLED_APPS
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','bookstore',
]DATABASES = {'default': {# 数据库引擎(是mysql还是oracle等)'ENGINE': 'django.db.backends.mysql',# 数据库的名字'NAME': 'mynewbook',# 连接mysql数据库的用户名'USER': 'root',# 连接mysql数据库的密码'PASSWORD': '19970928',# mysql数据库的主机地址'HOST': '127.0.0.1',# mysql数据库的端口号'PORT': '3306',},
}
  • appmodels.py中定义模型,该模型必须继承自django.db.models
from django.db import models# Create your models here.class Book(models.Model):#定义一个自增长的主键bookid = models.AutoField(primary_key = True)name = models.CharField(max_length=20,null=False)author = models.CharField(max_length=20,null=False)price = models.FloatField(default=0)
  • 迁移

在cmd终端内,进入到项目所在的路径,执行命令python manage.py makemigrations,生成迁移脚本文件:

python manage.py makemigrations
#输出
Migrations for 'bookstore':bookstore\migrations\0001_initial.py- Create model Book

在执行完上述代码后,Django为我们生成了一个迁移脚本0001_initial.py,我们去看看里面都有啥:

from django.db import migrations, modelsclass Migration(migrations.Migration):initial = Truedependencies = []operations = [migrations.CreateModel(name='Book',fields=[('bookid', models.AutoField(primary_key=True, serialize=False)),('name', models.CharField(max_length=20)),('author', models.CharField(max_length=20)),('price', models.FloatField(default=0)),],),]

之后,当我们调用python manage.py migrate时,Django就会根据迁移脚本中的这些代码,映射到数据库中。

执行命令python manage.py migrate,将迁移脚本文件映射到数据库中:

python manage.py migrate
#输出
Operations to perform:Apply all migrations: admin, auth, bookstore, contenttypes, sessions
Running 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 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 bookstore.0001_initial... OKApplying sessions.0001_initial... OK

我们看到Django帮我们生成了许多数据表,这是由于Django存在很多内置的应用,它们内部也有models.py模型文件,当我们第一次进行迁移时,Django就会生成与这些模型对应的数据表。

现在,我们查看mynewbook数据库中的数据表:

mysql> use mynewbook;
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_mynewbook        |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| bookstore_book             |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
11 rows in set (0.00 sec)

再查看一下 bookstore_book表的描述信息:

mysql> desc bookstore_book;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| bookid | int(11)     | NO   | PRI | NULL    | auto_increment |
| name   | varchar(20) | NO   |     | NULL    |                |
| author | varchar(20) | NO   |     | NULL    |                |
| price  | double      | NO   |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

可以看到,这和我们在models.py中设定的完全相同。

Django从理论到实战(part26)--ORM模型相关推荐

  1. Django从理论到实战(part27)--ORM模型的增删改查操作

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: 本系列Blog以应用为主,理论基础部分我在后端专栏的Django系列博客已经写过了,如果有些需要补充的知识点,我会在这个系列 ...

  2. Django从理论到实战(part28)--ORM常用Field详解

    学习笔记,仅供参考 参考自:Django打造大型企业官网–Huang Y: ORM常用Field详解 AutoField 映射到数据库中是int类型,可以有自动增长的特性.一般不需要使用这个类型,如果 ...

  3. Django从理论到实战(part51)--User模型

    学习笔记,仅供参考,有错必纠 摘自:pink老师教案 文章目录 User模型 字段 User模型的基本用法 创建用户 创建超级用户 修改密码 登录验证 User模型 User模型是Django框架的核 ...

  4. Django从理论到实战(part50)--使用模型来处理上传的文件

    学习笔记,仅供参考,有错必纠 文章目录 使用模型来处理上传的文件 `MEDIA_ROOT`和`MEDIA_URL` 限制文件的扩展名 使用模型来处理上传的文件 在定义模型的时候,我们可以给存储文件的字 ...

  5. Django从理论到实战(part35)--QuerySetAPI

    学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网–Huang Y:官方文档 QuerySet API 我们通常做查询操作的时候,都是通过模型名字.objects的方式进行操作.其实模 ...

  6. Django 第十课 1.【ORM模型】

    ORM模型介绍 随着项目的越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了: 1:SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长.会出现很多相近的SQL ...

  7. Django从理论到实战(part54)--MEDIA_ROOT和MEDIA_URL

    学习笔记,仅供参考,有错必纠 引用:使用模型来处理上传的文件:Django static静态配置文件 MEDIA_ROOT和MEDIA_URL 变量解释 MEDIA_ROOT:指定用户上传文件的本地路 ...

  8. Django从理论到实战(part49)--ModelForm

    学习笔记,仅供参考,有错必纠 参考自:某网课 ModelForm 我门在写表单的时候,会发现表单中的Field和模型中的Field基本上是一模一样的,而且表单中需要验证的数据,也就是我们模型中需要保存 ...

  9. Django从理论到实战(part47)--ListView类

    学习笔记,仅供参考,有错必纠 参考自:Django打造大型企业官网–Huang Y: 文章目录 类视图 ListView类 举个例子 Paginator和Page类 Paginator常用属性 Pag ...

最新文章

  1. RRDTool 存储原理简介——基于时间序列的环型数据库
  2. 一个5节点的polardb mysql_POLARDB问题
  3. python中如果要多次输入文本,关于文本游戏:文本游戏 – 如果语句基于输入文本 – Python...
  4. 一步一步教你如何将 yolov3/yolov4 转为 caffe 模型
  5. sql多层嵌套别名无效_SQL之复杂查询
  6. cuba 平台_认识CLI for CUBA平台
  7. gis 联合 融合_GIS技术进化 | 我们为何需要跨平台GIS技术体系?
  8. Python案例:四种方式编程求解一元二次方程
  9. 马斯克称下一代超级工厂占地可能没必要更大 但可能更先进
  10. win10删除*某些设置由你的组织来管理
  11. 如何将U盘设置为启动盘
  12. PMO和PM如何准备项目状态报告及进行项目进度汇报?【附项目状态表和进度跟踪表】
  13. Netty实现聊天室
  14. Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)
  15. 2022.10.10 英语背诵
  16. 编程java摇号购房,用java编写摇号器
  17. HTML 的静态网页分页样式
  18. More Effective C++ 阅读笔记 解释清晰
  19. 2020-09-23
  20. 国培计算机培训奥鹏,完整版奥鹏国培培训网络研修总结,推荐文档

热门文章

  1. 查看ubuntu linux开放的端口以及控制端口范围
  2. Ubuntu下面Master PDF Editor背景颜色设置
  3. php copy 图片_PHP-imagecopy黑色背景
  4. python控制台动画_Python真神奇,带你体验另类的“全自动编程”
  5. 移动端cube界面设计html,滴滴 Web 移动端组件库 cube-ui 开源
  6. MySQL存储过程及触发器
  7. The compiler compliance specified is 1.7 but a JRE
  8. 使用git时ssh提示“Load key /home/devid/.ssh/id_rsa: bad permissions”的解决办法
  9. linux安装python3.6以后报错处理
  10. 服务器防渗透(1)--信息收集