dango models and database ---- relation ship
一、django自带的ORM中可以定义表与表之间的对应关系、现比较一下各个不同关系之间数据库端的实现
1、ForeignKey(ManyToOne)关系
from django.db import models # Create your models here. class User(models.Model):
name=models.CharField(max_length=30)
phoneNumber=models.BigIntegerField() class Blog(models.Model):
user=models.ForeignKey(User)
blogName=models.CharField(max_length=16)
content=models.TextField() #
CREATE TABLE `sitea_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`phoneNumber` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sitea_blog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`blogName` varchar(16) NOT NULL,
`content` longtext NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `sitea_blog_user_id_2c1e69b4_fk_sitea_user_id` (`user_id`),
CONSTRAINT `sitea_blog_user_id_2c1e69b4_fk_sitea_user_id` FOREIGN KEY (`user_id`) REFERENCES `sitea_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
2、ManyToManyField关系
from django.db import models # Create your models here. class User(models.Model):
name=models.CharField(max_length=30)
phoneNumber=models.BigIntegerField() class Blog(models.Model):
user=models.ManyToManyField(User)
blogName=models.CharField(max_length=16)
content=models.TextField()
CREATE TABLE `sitea_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`phoneNumber` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; CREATE TABLE `sitea_blog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`blogName` varchar(16) NOT NULL,
`content` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sitea_blog_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`blog_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sitea_blog_user_blog_id_user_id_cdb4869e_uniq` (`blog_id`,`user_id`),
KEY `sitea_blog_user_user_id_a960fdcf_fk_sitea_user_id` (`user_id`),
CONSTRAINT `sitea_blog_user_blog_id_72f927d9_fk_sitea_blog_id` FOREIGN KEY (`blog_id`) REFERENCES `sitea_blog` (`id`),
CONSTRAINT `sitea_blog_user_user_id_a960fdcf_fk_sitea_user_id` FOREIGN KEY (`user_id`) REFERENCES `sitea_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 由上面可以看出ManyToMany 关系也是和通常的作法差不多、 加一个关联表
3、OneToOne关系
from django.db import models # Create your models here. class User(models.Model):
name=models.CharField(max_length=30)
phoneNumber=models.BigIntegerField() class Blog(models.Model):
user=models.OneToOneField(User,default=1)
blogName=models.CharField(max_length=16)
content=models.TextField()
CREATE TABLE `sitea_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`phoneNumber` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `sitea_blog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`blogName` varchar(16) NOT NULL,
`content` longtext NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`),
CONSTRAINT `sitea_blog_user_id_2c1e69b4_fk_sitea_user_id` FOREIGN KEY (`user_id`) REFERENCES `sitea_user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
---
dango models and database ---- relation ship的更多相关文章
- dango models and database ---- verbose name
一.django 自带ORM: 1.在django中用models.Mode来描述一张数据库中的表.而列用models.*Field来描述列 from django.db import models ...
- [Django] Creating an app, models and database
To add a new app, first cd to the project. Then run: python manage.py startapp scrumboard After that ...
- Database and models
Database and models The database Now that we have the Album module set up with controller action met ...
- Database API
Database API Introduction Basic Usage Selects Joins Aggregates Raw Expressions Inserts Updates Delet ...
- Django templates and models
models templates models and databases models 如何理解models A model is the single, definitive source of ...
- [转]Design Pattern Interview Questions - Part 4
Bridge Pattern, Composite Pattern, Decorator Pattern, Facade Pattern, COR Pattern, Proxy Pattern, te ...
- EF 5 最佳实践白皮书
Performance Considerations for Entity Framework 5 By David Obando, Eric Dettinger and others Publish ...
- django操作多数据库
django操作多数据库 1. 添加数据库路由分配文件 在项目文件夹里创建‘database_router’文件.将下面的代码复制到该文件里. from django.conf import s ...
- Android Weekly Notes Issue #225
Android Weekly Issue #225 October 2nd, 2016 Android Weekly Issue #225 本期内容包括: Android 7.0的Quick Sett ...
随机推荐
- 十款最常见的Linux发行版及目标用户(1)
1. Debian Debian运行起来极其稳定,这使得它非常适合用于服务器.Debian平 时维护三套正式的软件库和一套非免费软件库,这给另外几款发行版(比如Ubuntu和Kali等)带来了灵感.D ...
- 3DPrint ABS和PLA代码比较
PLA ABS
- nose的setup和teardown
参考:http://blog.csdn.net/linda1000/article/details/8533349 1.模块的setUp和tearDown def setUp(): print &qu ...
- jenkins使用slave报编码错误[WARNING] File encoding has not been set, using platform encoding ANSI_X3.4-1968, i.e. build is platform dependent!
jenkins:master-slave 模式: master编码配置: slave编码配置: 可以看出master 和 slave的配置是一样的,但是当项目在slave上执行的时候,偶尔会报如下错误 ...
- awk排序作业
输入:给定一个hotelinfo文件,文件格式如下: shanghai_city_7208 上海全季酒店淮海路店 shanghai_city_14744 锦江之星上海金山城市沙滩店 ...
- cocos2d-x:将iOS项目编译成Andriod项目
来源:http://www.cnblogs.com/angzn/p/3328049.html 一.Android 环境搭建 1.安装Andriod-NDK(Native Development Kit ...
- Orchard运用 - 定制博客分页显示
一般,对于条目过多的系统或博客,分页显示是最简单的方式.目前分页方式基本有三种格式: 1.显示所有信息,包括标明当前页面,提供上一页和下一页链接和使用首页和末页链接. 2.只标注上一页和下一页链接. ...
- 20个初学者实用的CSS技巧
过去就连一个镜像站点,我们都依靠大量的开发人员和程序员进行维护.得益于CSS和它的灵活性使得样式能够从代码中被独立抽离出来,从而让一个只具备基本CSS理论的初学者都能够轻易地改变网站的样式. 不论你是 ...
- 设置 IE 默认模式为 IE8
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
- Woocommerce 分类下的产品如何使用ID号来作为默认排序字段
在给一个客户开发网店系统时使用了WordPress系统的Woocommerce插件 WordPress版本:3.8 Woocommerce版本:2.0.20 如果没有指定排序规则(指定的字段),则Wo ...