文档章节

Python web项目(2) 通过类创建表

猿神出窍
 猿神出窍
发布于 2017/02/27 18:02
字数 541
阅读 21
收藏 0

 Python 描述类

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

每个模型相当于单个数据库表,每个属性也是这个表中的一个字段。 属性名就是字段名,它的类型(例如CharField )相当于数据库的字段类型 (例如 varchar )。例如, Publisher 模块等同于下面这张表(用PostgreSQL的 CREATE TABLE 语法描述):

CREATE TABLE "books_publisher" (
    "id" serial NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL,
    "address" varchar(50) NOT NULL,
    "city" varchar(60) NOT NULL,
    "state_province" varchar(30) NOT NULL,
    "country" varchar(50) NOT NULL,
    "website" varchar(200) NOT NULL
);

“每个数据库表对应一个类”这条规则的例外情况是多对多关系。 在我们的范例模型中, Book 有一个多对多字段 叫做 authors 。 该字段表明一本书籍有一个或多个作者,但 Book 数据库表却并没有 authors 字段。 相反,Django创建了一个额外的表(多对多连接表)来处理书籍和作者之间的映射关系。

 注意

我们并没有显式地为这些模型定义任何主键。 除非你单独指明,
否则Django会自动为每个模型生成一个自增长的整数主键字段每个Django模型都要求有单独的主键id

完成这些代码之后,现在让我们来在数据库中创建这些表:

1 激这些模型

编辑 settings.py 文件, 找到 INSTALLED_APPS 设置
注释掉四个默认的配置,同时,注释掉MIDDLEWARE_CLASSES的默认设置条目
 然后,添加`` ‘mysite.books’`` 到`` INSTALLED_APPS`` 的末尾

说明:'mysite.books'指示我们正在编写的books app

2 创建数据表:

#验证有效性
python manage.py validate
#创建
python manage.py sqlall books 
 或者
python manage.py startapp books
#记录改变
python manage.py makemigrations
#生成数据表
python manager.py migrate

说明:

自动生成的表名是app名称( books )和模型的小写名称 ( publisher , book , author )的组合

字段的数据类型设置:参考 http://www.mamicode.com/info-detail-1425942.html

© 著作权归作者所有

共有 人打赏支持
猿神出窍
粉丝 17
博文 181
码字总数 66634
作品 0
沙坪坝
项目经理
私信 提问
SQLAlchemy 和其他的 ORM 框架

Python ORM 概览 作为一个美妙的语言,Python 除了 SQLAlchemy 外还有很多ORM库。在这篇文章里,我们将来看看几个流行的可选 ORM 库,以此更好地窥探到Python ORM 境况。通过写一段脚本来读写...

oschina
2014/05/03
19.7K
6
跟着廖大学python之orm框架实现

废话少说 之前自己主要是做web前端的,web后台接触的很少,最近在学习廖大的python教程,课程最后有一个小项目,即完成一个个人博客,所以借此项目了解了解web后台到底在做什么?而有关后台接...

一名程序員的随记
2017/08/16
0
0
【译】Django官方教程——​编写你的第一个Django app,部分1

编写你的第一个Django app,部分1 【中括号中的绿色字是我自己添加的辅助内容,非官方文档内容,仅供参考】 【英文原文地址:https://docs.djangoproject.com/en/1.6/intro/tutorial01/】 【...

花果山妖
2014/08/03
0
0
python3 django配置数据库(mysql)

python3 django配置数据库(mysql) python3 下的mysql驱动 django 连接mysql默认驱动是MySQLdb,MySQLdb没有支持python3的版本,如果使用python3.x版本时,django连接mysql的方法 1、使用p...

代金券优惠
04/24
0
0
Django教程:第一个Django应用程序(1部分)

请看实例。本教程中将创建一个基本的投票应用。 它由两部分组成:查看投票的结果和投票的公共网站;添加、修改和删除投票的管理站点。 请先确认Django已经安装并检查版本号: # python -c "i...

KavenSu
2014/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Word Pattern(leetcode290)

Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empt......

woshixin
3分钟前
0
0
Kubernetes 1.13.1快速升级

Kubernetes 1.13.1已经正式发布,快速升级(含国内镜像快速下载链接)包括升级kubeadm/kubectl/kubelet版本、拉取镜像、升级Kubernetes集群三个主要步骤。注意Kubernetes 1.12.3版本暂时不支...

openthings
6分钟前
0
0
多线程的实现方式

多线程是指 一个程序运行时,产生或使用了不止一个线程。 线程的生命周期是怎么样的,下面这张图我们可以看出些端倪: 这章我们主要讨论多线程实现的方式,基础知识部分我们可以下来再恶补。...

搬砖大侠
18分钟前
0
0
新人千万不要在 Windows 上使用 Ruby on Rails

标题:新人千万不要在 Windows 上使用 Ruby on Rails 副标题:鼓励新人在 Linux 和 Mac 上使用 Ruby on Rails ! 原则:要走寻常路,不要学美特斯邦伟! "在 Windows上 使用 Ruby on Rails "是...

Jason909
26分钟前
0
0
day177-2018-12-14-英语流利阅读-待学习

艾滋病的治愈方法是否触手可及? Daniel 2018-12-14 1.今日导读 几十年来,艾滋病一直是世界上最难对付的“超级绝症”之一,从人类历史上第一次诊断出艾滋病病例的 20 世纪 80 年代早期到 20...

飞鱼说编程
52分钟前
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部