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 ...
随机推荐
- JavaScript面向对象编程指南(第2版)》读书笔记
一.对象 1.1 获取属性值的方式 water = { down: false } console.log(water.down) // false console.log(water['down'] ...
- 【Unicode编码表】UniCode编码表+转化器
UniCode编码表[转载:https://www.cnblogs.com/csguo/p/7401874.html] Unicode编码则是采用双字节16位来进行编号,可编65536字符,基本上包含 ...
- infor系统日常问题解决笔记
1.问题:结算单核准时候显示订单XXX的状态为已修改. 解决方法:在采购订单状态栏重新核准订单,采购订单状态不影响发票核准,结算后不允许再新增采购订单行,否则仍然会提示采购订单状态为已修改,且无法进行 ...
- matlab在图像中画长方形(框)
function [state,result]=draw_rect(data,pointAll,windSize,showOrNot) % 函数调用:[state,result]=draw_rect( ...
- Dede(织梦) CMS SQL Injection Vulnerability
测试方法: @Sebug.net dis本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! # Dede Cms All Versions Sql Vulnerability ...
- DRP经验总结
思想 指导 从开始看DRP项目到完成已经有三个月左右的时间了,这是一个足够长的视频,当看第一集的时候就再想,啥时候看完呢? 其间,也断断续续,有时看的效率高有时相反,有时几天看不了几集,好在总算看完了 ...
- C#获取相对路径[转]
C#最常使用的相对路径是从当前程序所在路径开始相对寻径,找到要找的路径,即以下两种最简单的方式: 1. 程序根目录.(即exe程序所在路径) //下面两个路径是等价的,都是exe程序所在路径(通常是b ...
- .net使用自定义类属性
.net中可以使用Type.GetCustomAttributes获取类上的自定义属性,可以使用PropertyInfo.GetCustomAttributes获取属性信息上的自定义属性. 下面以定义 ...
- 数据库插入数据返回当前自增主键ID值的方法
当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1. 先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2. ...
- Android -- 重写BaseAdapter以及对ListView的优化
背景 对于ListView.GridView.Gallery.Spinner等等,它是它们的适配器,直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属ge ...