Django学习之旅(六)

本文是 Django 学习之旅的完结篇,主要是讲述 model 层。model 层是与数据库打交道的,其中包括 怎么连接数据库、怎么对数据库进行增删改查等。主要逻辑代码是写在 models.py 中。

1

新建数据库

Django 支持的数据库有 PostgreSQL 、MySQL、SQLite等,基本上市面上的有的数据库都支持。我是使用 PyCharm 作为开发工具。PyCharm 在新建项目的时候,会自动生成一个 SQLite 数据库。如果你使用 MySQL 数据库,你需要自行创建数据库。我新建一个名为 Django_demo 的项目,在根目录有个名为 db 的 SQLite 数据库。

2

连接数据库

首先打开 PyCharm 软件,点击 PyCharm 的右侧名为 Database 的选项。这时会弹出操作数据库的可视化界面。点击当前选项卡的左上角的“ + ”号 =》Data source =》选择跟你新建数据库时相同的数据库。我新建数据库是选择 Sqlite ,所以选择 Sqlite 连接。

新建连接会弹出一个对话框。我们需要先安装连接数据库驱动包,再填写数据库访问的地址、数据库帐号密码,最后点击"Test conntection"按钮。如果提示"successful",则证明连接数据库成功。

3

创建字段

在 models.py 文件中,我们新建一个实体类,代码如下:

上述代码非常直观。每个模型都用一个类表示,该类继承自 django.db.models.Model。每个模型都有一些类变量,在模型中每个类变量都代表了数据库中的一个字段。

每个字段通过 Field 类的一个实例表示 —— 例如字符字段 CharField 和日期字段 DateTimeField 。这种方法告诉 Django,每个字段中保存着什么类型的数据。更多字段以及含义可以阅读 Django 官方文档。

4

创建表

打开终端,切换目录到 manage.py 所在目录。执行一下两行命令来创建数据库的表。

运行成功的结果如下:

在数据库也会发现我们刚才新建的表

5

插入与查询数据

Author 和 Book 表已经新建成功了。你可能有这样的疑惑。我要怎么往该表插入数据呢?听我慢慢道来。 在 Django 中,一个模型类对应一个数据库的表。因此,一个模型类的实例就表示表中的一条数据。为了输出的数据一目了然,我们需要对上面的 model 进行优化。

当我们在 model.py 对这两个模型类修改完成之后,我们需要通知数据库:“我模型已经修改了,你数据库也要更新呀”。 只需要执行上步的两行命令即可

Django 会对 models.py 进行检测,自动发现需要更改的,应用到数据库中去。

1)创建对象 打开 python 终端,利用命令行来创建一个对象。

看到 <Author: Author object> 意味着成功创建对象,即成功向数据库插入一条数据。

2)查询数据 同样在 python 终端下,执行下面的命令。

3)使用 QuerySet API 查询数据 从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。而一旦我们建立好数据模型,Django 会自动为我们生成一套数据库抽象的API。这样就大大方便我们创建、检索、更新和删除对象。 假如现在有个需求,我们需要查询数据库中所有的作者并打印出作者的姓名。我们可以利用 QuerySet 支持迭代的特性来进行操作。

QuerySet 还有更加复杂的用法, 利用过滤条件来筛选出数据。

4)使用 QuerySet 创建数据 我们之前创建对象都是通过命令行。但是在生产环境中,显然不能这么操作。那么我们要如何在 py 文件中创建对象呢? QuerySet 创建对象一共有四种办法

方法 A

方法B

方法C

方法D

5)使用 QuerySet 更新数据 A、单个 object 更新, 适合于 .get(), get_or_create(), update_or_create() 等得到的 obj,和新建很类似。

B、批量更新, 适用于 .all() .filter() .exclude() 等后面

6)使用 QuerySet 删除数据 删除的用法跟创建用法是大同小异,在获取结果后面添加 delete() 方法即可。

Django 学习之旅不知不觉到了终点了。终点又是另一个新的起点。我们虽然对 Django 已经有大概的认识,仅仅了解些皮毛,但是还需要深入学习,掌握其精髓。后续我会学习然后分享 Django 一些精髓用法。

作者:猴哥,公众号:极客猴。爱好读书,喜欢钻研技术,梦想成为文艺青年的IT Boy。

- END -

原文发布于微信公众号 - 极客猴(Geek_monkey)

原文发表时间:2017-06-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

构建自己的地理信息空间数据库及与客户端简单交互

最近研究了下postgresql数据库及其空间地理信息拓展插件——postgis。

2012
来自专栏安恒网络空间安全讲武堂

2018“安恒杯”Web安全测试大赛(秋季预选赛)

一键payload用第二个打第一个 sudo curl-v http://114.55.36.69:8004/ -H "Cookie: PHPSESSID=qp...

2653
来自专栏华仔的技术笔记

iOS下Debug和Release模式编译的小尴尬Profile

4717
来自专栏信安之路

FeiFeiCms 前台逻辑漏洞分析

该函数直接将 post 的数据传入,则跟进ff_update函数至\Lib\Lib\Model\UserModel.class.php文件

3823
来自专栏FreeBuf

WIN10下ROP初体验

* 本文原创作者:与非门salome,本文属FreeBuf原创奖励计划,未经许可禁止转载 首先,在windows10下编写一个具有一定安全机制但又存在漏...

2839
来自专栏后台全栈之路

在 libevent 中使用 MariaDB(MySQL)

在之前我翻译的官方文档中提到了 MariaDB 提供了对异步 I/O 的支持。那篇文章是一个比较简要的介绍。不过实际适配中,官方也提供了一个完整适配 libev...

7665
来自专栏编程坑太多

python进程和线程概述

1365
来自专栏为数不多的Android技巧

Android Studio你不知道的调试技巧

写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 Evaluat...

801
来自专栏owent

给客户端写得LRU缓存

由于我们的客户端的元素和资源比较多,cocos框架的各种库质量参差不齐,导致了有些地方加载速度实在很慢。并且没有一个统一的内存管理机制导致了整个内存占用不太好控...

1041
来自专栏张善友的专栏

在ASP.NET Core中使用brotli压缩

2595

扫码关注云+社区

领取腾讯云代金券