模型设计

我们一般操作数据库的时候都是通过写sql语句,那么能不能不写sql语句就可以操作数据库呢? 可以利用ORM框架。

ORM框架

O是object,也就 类对象 的意思,R是relation,翻译成中文是关系,也就是关系数据库中 数据表 的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。

Django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的增删改查操作。

使用Django进行数据库开发的步骤如下:

  • 在models.py中定义模型类
  • 迁移
  • 通过类和对象完成数据增删改查操作

Django模型设计

在上篇文章中我们创建了一个图书管理系统(BMSTest),并部署了一个book应用。我们接着这个项目来介绍Django进行数据库开发过程,模型设计。

1、定义模型类

模型类定义在models.py文件中,继承自models.Model类。

说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长。

设计图书类

BookInfo
类属性 数据类型 备注
title CharField(字符类型) 图书名称
author CharField(字符类型) 图书作者
pub_date DateField(日期类型) 出版日期

模型类的设计

根据设计,在models.py中定义模型类如下:

# -*- coding:utf-8 -*-
"""
@Author   :Hui
@Desc     :{模型设计模块}
"""from django.db import modelsclass BookInfo(models.Model):"""图书模型类"""title = models.CharField(verbose_name=u'图书名称', max_length=20)author = models.CharField(verbose_name=u'图书作者', max_length=20)pub_date = models.DateField(verbose_name=u'出版日期')

参数介绍

  • verbose_name:详细备注名称
  • max_length:数据最大长度

这里就简单的用了几个参数,详细参数的使用,大家可以查看Django官方文档。

继承models.Model的类的设计都会对应一张数据库表。

2、迁移

迁移前目录结构如下图:

迁移由两步完成:

  • 1.生成迁移文件:根据模型类生成创建表的迁移文件。
  • 2.执行迁移:根据第一步生成的迁移文件在数据库中创建表。

生成迁移文件

PyCharm Terminal 终端下输入如下命令:

python manage.py makemigrations

执行生成迁移文件命令后,会在应用book目录下的migrations目录中生成迁移文件。

生成迁移文件后的目录结构:

打开上图中的迁移文件,内容如下:

# Generated by Django 3.1.2 on 2020-10-19 09:01from django.db import migrations, modelsclass Migration(migrations.Migration):initial = Truedependencies = []operations = [migrations.CreateModel(name='BookInfo',fields=[('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),('title', models.CharField(max_length=20, verbose_name='图书名称')),('author', models.CharField(max_length=20, null=True, verbose_name='图书作者')),('pub_date', models.DateField(verbose_name='出版日期')),],),]

Django框架根据我们设计的模型类生成了迁移文件,在迁移文件中我们可以看到fields列表中每一个元素跟BookInfo类属性名以及属性的类型是一致的。同时我们发现多了一个id项,这一项是Django框架帮我们自动生成的,在创建表的时候id就会作为对应表的主键列,并且主键列自动增长。

执行迁移文件

PyCharm Terminal 终端下输入如下命令:

python manage.py migrate

执行结果

(py_django) D:\Hui\Code\Python\DjangoProject\BMSTest>python manage.py migrate
Operations to perform:Apply all migrations: admin, auth, book, 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 auth.0012_alter_user_first_name_max_length... OKApplying book.0001_initial... OKApplying sessions.0001_initial... OK

Applying book.0001_initial... OK 说明我 book 应用下的 0001_initial 迁移文件迁移成功。

迁移后的目录结构图:

Django默认采用 sqlite3 数据库,上图中的 db.sqlite3 就是Django框架帮我们自动生成的数据库文件。 sqlite3 是一个小型的数据库,通常用在手机中,它跟 mysql 一样,我们也可以通过sql语句来操作它。

迁移成功后 sqlite3 数据库会创建 book_bookinfo

  • book 是应用的名称
  • bookinfo 是模型类的名称

因此数据表的默认名称为:<app_name>_<model_name> ,应用名 + 下划线 + 模型名

Django操作数据库表

数据库表建好了,看看Django如何便捷的操作。

打开 Pycharm Terminal 终端输入如下命令:

python manage.py shell

进入 项目的 shell 终端,进行简单的API操作。输入quit() 退出项目终端。

查询

首先引入book/models中的类:

from book.models import BookInfo

查询所有图书信息:

BookInfo.objects.all()

因为当前并没有数据,所以返回空列表

>>> from book.models import BookInfo
>>> BookInfo.objects.all()
<QuerySet []>
>>>

添加

添加图书信息

from datetime import date
from book.models import BookInfobook = BookInfo()
book.title = '天龙八部'
book.author = '金庸'
book.pub_date = date(1967, 10, 7)# 保存并向数据库表添加图书信息
book.save()

然后在查看图书信息,是否添加成功

>>> BookInfo.objects.all()
<QuerySet [<BookInfo: BookInfo object (1)>]>

all() 是查询所有,返回一个查询集,我们来是试试 get() 条件查询

book = BookInfo.objects.get(id=1)

返回的类型是 BookInfo 对象。可以利用这个对象来获取你想要的图书信。

>>> book = BookInfo.objects.get(id=1)
>>> book.title
'天龙八部'
>>> book.author
'金庸'
>>> book.pub_date
datetime.date(1967, 10, 7)
>>>

这样是不是便捷多了,不用写 SQL 语句。

修改更新

>>> book.pub_date = date(1986, 6, 6)
>>> book.save()
>>> book.pub_date
datetime.date(1986, 6, 6)

删除

>>> book.delete()
(1, {'book.BookInfo': 1})# 在查询就为空了
>>> BookInfo.objects.all()
<QuerySet []>
>>>

公众号

新建文件夹X

大自然用数百亿年创造出我们现实世界,而程序员用几百年创造出一个完全不同的虚拟世界。我们用键盘敲出一砖一瓦,用大脑构建一切。人们把1000视为权威,我们反其道行之,捍卫1024的地位。我们不是键盘侠,我们只是平凡世界中不凡的缔造者 。

Django教程 —— 模型设计相关推荐

  1. 如何自学python到做项目-django教程如何自学

    Django教程是讲解Django框架学习方法和步骤的,可以理解为教材,是供初学者或者程序员学习和提升技术的. 下面介绍下Django教程所包含的内容以及学Django所需要的必备技能. 学Djang ...

  2. django教程day06

    <Django 教程> 讲师: 魏明择 时间: 2019 目录 数据表关联关系映射 Relationship Map 一对一映射 一对多映射 多对多映射 cookies 和 session ...

  3. Django教程:第一个Django应用程序(1部分)

    2019独角兽企业重金招聘Python工程师标准>>> Django教程:第一个Django应用程序(1部分) 请看实例.本教程中将创建一个基本的投票应用. 它由两部分组成:查看投票 ...

  4. django一个html先后两个form,Django教程(三)- Django表单Form

    目录: 1.Form 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 2.Form中 ...

  5. 学习用的Django教程

    买来学习用的Django教程,分享给大家. 一套讲解Django的教程,可以深入了解原理. 获取分享请点击下方链接: 获取分享

  6. django教程03

    <Django 教程> 讲师: 魏明择 时间: 2019 目录 静态文件 Django中的应用 - app 什么是应用(app) 创建应用app Django应用的结构组成 数据库 和 模 ...

  7. 微软出Django教程啦!

    周围很多小伙伴都在学Python.Python功能强大,语法简单,可以干很多事情.比如自动化测试,运维,机器学习,数据分析,金融股票量化分析,其实很多小公司或者大厂的运维部门都用Python做Web后 ...

  8. python的django介绍_django Django简介 - 刘江的django教程

    Django简介 阅读: 184636 评论:12 引言 我们都知道,Django是基于Python的Web开发框架. 那么,什么是Web开发? Web开发指的是开发基于B/S架构,通过前后端的配合, ...

  9. python后台架构Django教程——日志系统

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python日志的相关内容可以先参考:http://blog.csdn.net/luanpeng825485697/article/detai ...

最新文章

  1. 马斯克宣布特斯拉破产,自己哭晕在车旁?
  2. 网久环境服务启动命令
  3. HandlerExceptionResolvers
  4. 几种流行的AJAX框架:jQuery,Mootools,Dojo,Ext JS的对比
  5. 九九乘法表编程上三角python_java语言打印上三角和下三角,进一步得到九九乘法表...
  6. Java同步—线程池的创建和使用
  7. css点滴3—5种方式实现圆环
  8. 第三届泰迪杯全国大学生数据挖掘竞赛通知
  9. vue echarts 柱状图
  10. 【C++】(八)函数
  11. GOlang将华氏温度转换为摄氏温度的函数
  12. numpy_flatten函数
  13. 数据可视化编辑平台上线,小程序也能拥有可视化图层
  14. angular-ng new
  15. HDMI差分对走线是否需要走等长
  16. Unity win平台 调整窗口大小强制固定比例
  17. 测试你好世界这个标题
  18. Google创新机器
  19. 得到APP互联网营销分析
  20. PLSQL Developer 最新版安装、汉化、激活工具

热门文章

  1. 蓝桥杯算法特训 | C++ | 暴力破解与实用性优先
  2. php如何识别flac文件,去伪存真 这几招教你辨析真假无损音乐
  3. 什么是风险管理(风险管理战略规划的步骤)
  4. 某中心医院网络搭建(计算机网络规划设计)
  5. 前端----高度塌陷及解决办法(最详细解)
  6. alex机器人 ser_机器人Alex
  7. ZOJ-3802:Easy 2048 Again(2048游戏 状态压缩dp)
  8. 用devc++表白_表白 | 回复4.14号表白32,我也是个乒乓球初学者,可以约球玩玩咩...
  9. 微信小程序之服装购物商城(含源码+论文+答辩PPT等)
  10. 小米路由器R3开启SSH登陆权限