Python--Django学习笔记2
本篇介绍Django中的Model层。
首先介绍sqlite3,这是在当前版本中Django默认使用的数据库,sqlite也是Android中所使用的数据库。
接着介绍最最最常见的MySQL数据库如何在Django中进行配置。
一、sqlite3
假设需求为创建两个表blog和comment,blog中有标题title和发表日期pub_date,comment中有blog的外键,评论内容content和点赞次数votes
①定义models,修改blog目录下的models.py:
from django.db import models class Blog(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published') class Comment(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
content = models.CharField(max_length=500)
votes = models.IntegerField(default=0)
CharField、DateTimeField和IntegerField都是数据类型,这里还定义了一个外键,表示一个博客中可以有多个评论。
②将app加载至项目中
打开settings.py文件,找到INSTALLED_APP,将blog这个app添加进去:

③创建迁移(变更)脚本
当models.py的内容也就是model被改变之后,需要创建迁移告诉django发生了什么变化,命令及运行提示如下:

这里表示创建了Blog和Comment两个model,并且迁移脚本代号为0001
④检查脚本内容
这个blog/migrations/0001_initial.py脚本一般情况下不需要去更改,但是django已经把它设计成可读,也就是开发者可以根据需求修改,这里不做修改。
一般③完成之后可以直接执行生成数据表的命令,但是为了确保其正确性,可用通过如下命令来让django生成sql代码进行检查:


⑤执行迁移
当确认SQL无误后,便可以让django生成对应的数据表了,生成的命令如下:

可以看到,这次的migrate提交了很多model的变更,原因是在项目创建之后,django会生成几个app(在INSTALLED_APP中可以看到),而这些app也有需要用到数据库,所以当第一次执行migrate命令,会有多个提交,可以看到我们的blog也成功提交了。
⑥通过shell访问
为了使得显示结果更为直观,先对models.py文件进行一些修改,给每个model重写__str__方法:
from django.db import models class Blog(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published') def __str__(self):
return self.title class Comment(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
content = models.CharField(max_length=500)
votes = models.IntegerField(default=0) def __str__(self):
return self.content
接着通过下面的命令打开shell:

在shell中,分别执行如下命令:
导入models

查询所有Blog

插入一个Blog

插入和查询评论

⑦通过工具查看数据库
sqlite数据库的文件结构很简单,这个数据库的文件其实已经存在与项目中,在项目根目录下的db.sqlite3就是对应的数据库,而很多时候为了调试方便,可用使用一些辅助工具进行操作数据库,这里推荐的是IDEA下的Database Navigator

安装完成重启IDEA后,可用在工具栏中发现多了一个叫DB Navigator的选项,可以创建一个连接:


完成以后,打开连接会显示一个编辑窗口,在这个窗口,可以通过执行SQL命令对数据库进行操作:

执行命令后会弹出result界面:

二、MySQL数据库配置
①修改settings.py
将DATABASE修改为对应的信息:
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': 'django.db.backends.mysql',
'USER': 'root',
'PASSWORD': 'root',
'NAME': 'django_blog',
}
}
修改完成后,在shell中执行一次migrate命令即可生成:


三、从数据表生成Model
很多时候,开发之前已经约定了数据库中的数据表了,那么django是如何从数据库中的表生成对应的model的呢,其实很简单。
①创建数据表:

②通过inspectdb命令生成对应的model:

可以看到,生成的代码中包含了BlogUser这个model,这个model的名字是可用自由更改的。
③存入models.py文件:

此时blog/models.py文件的内容为:
# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
# * Rearrange models' order
# * Make sure each model has one field with primary_key=True
# * Make sure each ForeignKey has `on_delete` set to the desired behavior.
# * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from __future__ import unicode_literals from django.db import models class BlogUser(models.Model):
name = models.CharField(max_length=255, blank=True, null=True)
password = models.CharField(max_length=255, blank=True, null=True) class Meta:
managed = False
db_table = 'blog_user'
④测试
在数据表中插入数据:

在shell中尝试读取:

Python--Django学习笔记2的更多相关文章
- python Django 学习笔记(一)—— Django安装
注:本人python版本2.7.5 ,win7系统 安装Django https://www.djangoproject.com/download/ 官方下载Django-1.5.5.tar.gz 1 ...
- python Django 学习笔记(二)—— 一个简单的网页
1,创建一个django项目 使用django-admin.py startproject MyDjangoSite 参考这里 2,建立视图 from django.http import HttpR ...
- Python——Django学习笔记
Django——一个封装好的神奇框架 若本文有任何内容错误,望各位大佬指出批评,并请直接联系作者修改,谢谢!小白学习不易. 一.简要模型 模型类操作数据表: python manage.py shel ...
- Python & Django 学习笔记
最近在学校Python和Django.在学习中遇到了种种的问题,对于一个新手来说,下面的问题可能都会遇到.希望能帮助到那些和我一样的人!!0.python-dev安装(ubuntu) apt-get ...
- python Django 学习笔记(五)—— Django admin自动管理界面
1,激活管理界面 修改settings.py MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.c ...
- python Django 学习笔记(六)—— 写一个简单blog做增删改练手
简单效果图 1,创建一个项目myblog 可参考这里 myblog/ manage.py myblog/ __init__.py settings.py urls.py wsgi.py 2,创建blo ...
- python Django 学习笔记(四)—— 使用MySQL数据库
1,下载安装MySQLdb类库 http://www.djangoproject.com/r/python-mysql/ 2,修改settings.py 配置数据属性 DATABASES = { 'd ...
- python Django 学习笔记(三)—— 模版的使用
模版基本介绍 模板是一个文本,用于分离文档的表现形式和内容. 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签). 模板通常用于产生HTML,但是Django的模板也能产生任何 ...
- Python框架之Django学习笔记(十七)
Django框架之表单(续二) 今天的这篇博客将是Django学习笔记博客的最后一篇,基本每周最少一篇的Django框架学习,坚持到今天也实属不易,当然了,这个框架的学习仅仅是Django框架的基础部 ...
- Django 学习笔记之三 数据库输入数据
假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...
随机推荐
- [Socket]Socket聊天小程序
一个简单是Socket聊天小程序,读写操作在不同的线程中.服务器端采用线程池. 1.Server import java.io.IOException; import java.net.ServerS ...
- 支持自定义协议的虚拟仪器【winform版】
首先,这个程序的由来,额,工作以来,做的最久的就是上位机,对市面上的大部分组态软件都感到不满,不好用,LabView虽然用起来不错,但是入门还是不够简单,刚好现在工作比较闲(已经不再做上位机了),所以 ...
- sudo 与输出重定向
本文介绍如何使用 sudo 将输出重定向到当前用户没有权限的文件.注意:本文中 demo 的演示环境为 ubuntu 18.04. Permission denied 问题 如果当前用户没有某个文件的 ...
- 详解centos7配置本地yum源的方法
近在使用虚拟机时遇到一些麻烦,因为公司内部有网络管理,所以vm连接不上外网,yum无法安装软件,怎么解决呢?–使用iso做本地yum源,可以解决大部份的包安装. vm安装的是centos7. 1.挂载 ...
- Python迭代器(Iterator)
概述 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 延迟计算或惰性求值 (Lazy evaluation) 迭代器不要求你 ...
- iOS网络请求安全认证(JWT,RSA)
在网络世界中,安全是一个很重要的问题,以往的HTTP请求已经不能承担这个安全任务,抓包工具一抓,你的所有网络请求全都曝光.当然,你可能会采用加密算法来加密数据,但是这仍然不够. 在移动端和服务器的通信 ...
- Wannafly挑战赛25 A.因子
传送门 [https://www.nowcoder.com/acm/contest/197/A] 题意 给你n,m,让你求n!里有多少个m 分析 看这个你就懂了 [https://blog.csdn. ...
- Beta阶段爬取数目预估
预计于12月29号能进行Beta版本发布. Beta阶段我们的爬取动作应该更有针对性,在爬取期间如若数据处理小组有需求,会优先爬取数据处理小组提供的种子链接.预估在项目展示之前能够爬取的数目: 普通网 ...
- Mooc总结——Linux内核分析
朱荟潼+ 原创作品转载请注明出处 :<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 学习笔记链接汇总 第 ...
- springboot整合fastJson遇到重定向问题
通过网上教程使用springboot整合fastJson后遇到页面重定向问题(使用的springboot版本是2.0.2.RELEASE ,其他的版本可能不会出现以下问题),如下图: 我的项目结构如下 ...