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 学习笔记之二的相关命令. 那么这篇主要介 ...
随机推荐
- SERDES关键技术总结
转自https://www.cnblogs.com/liujinggang/p/10125727.html 一.SERDES介绍 随着大数据的兴起以及信息技术的快速发展,数据传输对总线带宽的要求越来越 ...
- [React]全自动数据表格组件——BodeGrid
表格是在后台管理系统中用的最频繁的组件之一,相关的功能有数据的新增和编辑.查询.排序.分页.自定义显示以及一些操作按钮.我们逐一深入进行探讨以及介绍我的设计思路: 新增和编辑 想想我们最开始写新增 ...
- TRIO-basic指令--九九乘法表demo
在路上闲的没事,想到之前自己用别的语言实现乘法口诀表,于是来了兴趣用TRIO-basic试一下,挺简单的一段代码,大家看看就好. ' TRIO-basic '实现乘法口诀表 定义两个整型的局部变量 D ...
- 用EXCLE群发outlook邮件
Outlookでメール一括送信する方法(差し込み.HTML形式.添付ファイル複数あり) メールを一括送信する方法はウェブ上にいくつも紹介されていましたが.以下のすべての条件を満たすものが見つからなかっ ...
- ELK基础架构解说-运维笔记
一.ELK日志分析工具介绍1) Elasticsearch1.1) Elasticsearch介绍ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索 ...
- java注解XML
用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换. 比较常用的几个: @XmlRootElement:根节点 @XmlAttribute:该属性作 ...
- php ajax登录注册
用户登录与退出功能应用在很多地方,而在有些项目中,我们需要使用Ajax方式进行登录,登录成功后只刷新页面局部,从而提升了用户体验度.本文将使用PHP和jQuery来实现登录和退出功能. 准备数据库 本 ...
- 《Linux内核设计与实现》读书笔记四
Chapter 3 进程管理 3.1 进程 进程就是处于执行期的程序(目标码存放在某种存储介质上),但进程并不仅仅局限于一段可执行程序代码.通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部 ...
- Linux内核分析第六周总结
进程控制块PCB--task_struct 操作系统的内核里的三大功能: 进程管理 内存管理 文件系统 进程描述符--task_struct 进程管理是最核心的内容 然而Linux进程的状态与操作系统 ...
- 用户模拟+spec
用户模拟:用户模拟的对象分别为小学二年级学生,学生父亲以及小学教师. 名字 孔小颖 性别 男 职业 小学生 收入 来自父母给予 知识层次和能力 小学二年级 生活/工作情况 在学校上课,数学成绩较差,放 ...