一步步学习Python-django开发-建立django数据库
上篇文章建立了一个空的网站。现在我们要准备正式我们的网站开发咯。那么开发的第一步是啥呢?当然是要确定做什么网站了。每个人的开发习惯可能不尽相同,有点可能是从前端开始设计,有的可能是从数据库开始设计(不得不说django在数据库操作方面是很强大的)。我属于后者,因为我对前端不太熟悉,哈哈!
我要做一个公司内部团体订餐系统,方便统一订餐。功能需求很简单:公司每天要订餐,订餐每天定一家餐馆的菜。
我想到需要建立如下数据库表:餐馆(Restaurant)、商品分类(Category)、商品(good)、消费者(Custom)、消费者评论(Comment )、菜(Menu每个消费者可能有多个菜),订单(Order 每天订单次数基本固定)。具体到每个表的关键字,在后面会看到。
好了分析好了我们需要的数据结构,我们就利用Python-django构建我们的数据库,由于此系统对数据库的要求不高,我们使用默认的sqlite:
1. 首先我们要建立一个app(为啥叫app,待后续分解)。我们建立一个名为polls(名字你随意):python manage.py startapp polls
2. 如果执行成功,会再工程目录下生成一个polls目录。
3. 设计数据库结构及映射关系:django采用ORM(对象关系映射)来创建数据库。你要建立的数据库,需要修改polls app目录下的models.py 文件。在此文件中添加对象及对象之间的映射关系,以下为我的修改,添加了之前说明的数据库表:
from django.db import models # Create your models here. class Restaurant(models.Model):
name = models.CharField(max_length=50)
URL = models.CharField(max_length=200, default="") def __str__(self):
return self.name class Category(models.Model):
name = models.CharField(max_length=50) def __str__(self):
return self.name class Good(models.Model):
name = models.CharField(max_length=50)
price = models.FloatField()
description = models.CharField(max_length=200)
category = models.ForeignKey(Category)
restaurant = models.ForeignKey(Restaurant) def __str__(self):
return self.name class Custom(models.Model):
name = models.CharField(max_length=20)
sex = models.BooleanField()
age = models.IntegerField()
department = models.IntegerField() def __str__(self):
return self.name class CustomComment(models.Model):
content = models.CharField(max_length=200)
score = models.IntegerField()
good = models.ForeignKey(Good)
custom = models.ForeignKey(Custom) def __str__(self):
return self.content class Order(models.Model):
name = models.CharField(max_length=50, default= "晚餐")
date = models.DateTimeField() def __str__(self):
return self.date class Menu(models.Model):
order = models.ForeignKey(Order)
good = models.ForeignKey(Good)
custom = models.ForeignKey(Custom) def __str__(self):
return self.order
4. 将以上数据库表信息及映射关系应用到真实的数据库中:
- 根据model生成具体操作文件,告诉django你的数据库变化:python manage.py makemigrations polls
- 上述操作会生成一个以序号开头文件,首次是0001,之后每次操作加1,要做修改修改指令后面对应的数字即可,我们要利用这个文件生成具体操作数据库的sql语句:python manage.py sqlmigrate polls 0001
- 好了有了sql语句我们就可以真正修改数据了:python manage.py migrate
- 有时候我们的第一次设计的数据库并不是完美的,如果添加新的非空列,在model中要设置default值。上面的生成sql语句的指令注意使用新的序号。
- 你可以通过python命令行体验具体如何操作数据:
$python manage.py shell
>>> import django
>>> django.setup()
>>> from polls.models import Restaurant, Category,Good #引入数据对象
>>> Restaurant.objects.all() #查询所有餐馆数据
>>> r = Restaurant(name = "宇宙卷饼", URL = "http://waimai.baidu.com/waimai/shop/598777734712241745")
>>> r.save()
>>> c = Category(name = "热卖")
>>> c.save()
>>> g = Good(name = "酱香鸡腿肉卷(中份)", price = , description = "美味", category = c, restaurant = r, times = )
>>> g.save()
>>> g.name #查询存储结果
>>> g.category.name
>>> g.restaurant.name
6. 我再django.setup()时遇到以下问题,其实出现这个问题的是python打开的姿势不对,应当使用python manage.py shell 但是你错误的姿势还是可以补救的,以下就是补救措施:
问题:django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
解决方法:
$python >>> import os >>> os.environ['DJANGO_SETTINGS_MODULE'] = 'cookbook.settings' >>> import django >>> django.setup()
7. 数据库以及表的名字是很重要的,一定要想好,而django是根据你建立的app名称做表名前缀的。所以你一定要注意app名称。在我们刚建立一个数据库,数据库中还没有填充内容还是可以补救的(不推荐)。才开始学习,由于对app的概念不是很熟悉,我就犯了这样的错我。我是这么解决的,这中方案只是在开发最开始阶段有效。
1. 修改app目录名称为你的名称:我将我的polls修改为books。然后修改settings.py 的INTALLED_APPS中的polls为books。备份原有的生产的数据库文件。然后删除数据库文件,修改 migrations目录下的带序号文件中的polls为books。然后执行 python manage.py makemigrations books 没有错误的话应该提示没有变化。然后依次对每个序号文件执行迁移到数据库的两条指令:python manage.py sqlmigrate books 0001 和 python manage.py migrate。现在你的数据库完成了修改,如果你原来的数据库还有数据,你就可以通过某种方式(你可以写一个简单的sql脚本,注意主外键关系)吧原有数据库内容重新导入到新的数据库中。
好了现在数据库创建完毕,我们也进行了测试
一步步学习Python-django开发-建立django数据库的更多相关文章
- Django开发笔记之数据库的设计
后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...
- Django开发基础----操作数据库
Django中对数据库的操作是由Models来完成的 Models是什么? 通常,一个Model对应数据库的一张数据表 Django中Models以类的形式出现 它包含了一些基本字段以及数据的一些行为 ...
- 零基础学习Python web开发、Python爬虫、Python数据分析,从基础到项目实战!
随着大数据和人工智能的发展,目前Python语言的上升趋势比较明显,而且由于Python语言简单易学,所以不少初学者往往也会选择Python作为入门语言. Python语言目前是IT行业内应用最为广泛 ...
- python测试开发django-13.操作数据库(增删改查)
前言 django的models模块里面可以新增一张表和字段,通常页面上的数据操作都来源于数据库的增删改查,django如何对msyql数据库增删改查操作呢? 本篇详细讲解django操作mysql数 ...
- Pycharm+Django+Python+MySQL开发 后台管理数据库
Django框架十分简单易用,适合搭建个人博客网站.网上有很多教程,大多是关于命令行操作Django,这里分享一些用最新工具进行Django开发过程,主要是PyCharm太强大,不用有点可惜. 第一次 ...
- Python Web开发:使用Django框架创建HolleWorld项目
开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...
- python测试开发django-10.django连接mysql
前言 Django 对各种数据库提供了很好的支持,包括:PostgreSQL.MySQL.SQLite.Oracle.本篇以mysql为例简单介绍django连接mysql进行数据操作 Django连 ...
- python测试开发django-7.django模板继承(block和extends)
前言 打开一个网站时候,点导航栏切换到不同的页面,发现导航部分是不变的,只是页面的主体内容变了,于是就可以写个母模板,其它的子页面继承母模板就可以了. 母模板 可以在母模板中添加多个块标签,每个块标签 ...
- Python高效开发实战——Django、Tornado、Flask、Twisted
今天要推荐的就是这本书,内容涉及四种主流的Python Web开发框架,零基础完成网站搭建.数据库设计.前后端开发,全方位领悟Python原理与应用. 最新最全的框架实战,尽在这本书,可搜索亚马逊.京 ...
随机推荐
- jQuery整理您的笔记----jQuery开始
Jquery它是一种高速.简明的JavaScript相框,jQuery设计目标:Write Less,Do More(写更少的代码,做很多其他的事情). 一.Jquery框架优势: 1.轻量级 jQu ...
- Cocos2d-x 3.0 编译出错 解决 error: expected ';' at end of member declaration
近期把项目移植到cocos2d-x 3.0,在整Android编译环境的时候,出现一大堆的编译出错,都是类似"error: expected ';' at end of member dec ...
- CORS跨域资源共享
CORS(跨域资源共享)跨域问题及解决 当使用ajax跨域请求时,浏览器报错:XmlHttpRequest error: Origin null is not allowed by Access-Co ...
- APACHE启动失败是SYSTEM对apache目录没权限导致
表现如下: Apache: 1.The Apache service named reported the following error:>>> (OS 5)拒绝访问. : htt ...
- Hadoop -YARN 应用程序设计概述
一概述 应用程序是用户编写的处理数据的统称,它从YARN中申请资源完毕自己的计算任务.YARN自身相应用程序类型没有不论什么限制,它能够是处理短类型任务的MapReduce作业,也能够是 ...
- PHP 3:从Login界面谈PHP标记
原文:PHP 3:从Login界面谈PHP标记 前一篇文章简要介绍了此实例.OK,我们就从第一个页面Login页面入手吧.还是看看界面怎么样,是不是很想指导它到底是如何实现的呢?好的,看看其代码吧: ...
- Fedora 20 Gnome安装及配置记录
下载了F20的Gnome版,原先安装的是19KDE的,原因是昨晚看书,觉得电脑开着也没什么事情,倒不如看看能不能升级或下载点东西 原先是KDE的界面,所以打算换换风格,使用下Gnome,不过更换过程总 ...
- javascript实现代码高亮
javascript实现代码高亮-wangHighLighter.js 1. 引言 (先贴出wangHighLighter.js的github地址:https://github.com/wangfup ...
- js 指定位置插入html标签(可编辑div)
demo效果如下: html代码部分如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...
- 【分布式存储系统sheepdog
】
Sheepdog,是由NTT的3名日本研究员开发的开源项目,主要用来为虚拟机提供块设备. 其架构例如以下: 以下,我们将从架构.模块等几个方面来介绍下: 一.架构图 如上图: 採用无中心节点的全对称架 ...