Python - Django - ORM 一对一表结构
当一张表的某一些字段查询的比较频繁,另外一些字段查询的不是特别频繁,可以把不怎么常用的字段 单独拿出来做成一张表,然后用一对一的表关联起来
这样既保证数据都完整的保存下来,又能保证检索更快
models.py:
from django.db import models # 作者
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16, null=False, unique=True)
book = models.ManyToManyField(to="Book")
info = models.OneToOneField(to="AuthorInfo", null=True) # 一对一关联 AuthorInfo 表 def __str__(self):
return "<Author object: {}>".format(self.name) # 作者信息
class AuthorInfo(models.Model):
phone = models.IntegerField()
addr = models.CharField(max_length=32)
运行命令,查看数据库

先在 authorinfo 表中添加数据

接下来在 author 表中添加数据

这里 info_id 中有两个 1,所以出错了。一对一的表一个 id 只能对应一个 id
修改后:

注意:
刚才 John 那行数据因为 info_id 重复而执行失败,数据更新了 Jack、Sum,所以要刷新一下再添加
一对一查询:
orm.py:
import os if __name__ == '__main__':
# 加载 Django 项目的配置信息
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite2.settings")
# 导入 Django,并启动 Django 项目
import django
django.setup() from app01 import models # 一对一的查询
author_obj = models.Author.objects.get(id=3)
author_info = author_obj.info # 通过 info 字段获取相应的 AuthorInfo 对象
print(author_info)
print(author_info.phone, author_info.addr)
运行结果:

AuthorInfo 表下的 phone、addr 字段,也相当于是 Author 表下的字段
Python - Django - ORM 一对一表结构的更多相关文章
- Python - Django - ORM 自定义表名
通过 Django 建立的表 命名方式为:项目名_表名 可以将该默认命名方式进行修改 models.py: from django.db import models class Person(mode ...
- Python--day70--ORM一对一表结构
ORM一对一表结构:
- django migrate生成表结构DateTimeField 类型加了6位精度别的框架无法调用的问题?
背景介绍 django migrate 生成表结构时,对于DateTimeField 类型的处理是加了6位精度的,只用django处理是没有任何问题的,但是如何别的框架来读取这种字段会读取不到该字段值 ...
- Django ORM 多表操作
目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加外键) 一对多(外键 ForeignKey) 一对一 (OneToOneFeild) 多对 ...
- Python - Django - ORM 多对多表结构的三种方式
多对多的三种方式: ORM 自动创建第三张表 自己创建第三张表, 利用外键分别关联作者和书,关联查询比较麻烦,因为没办法使用 ORM 提供的便利方法 自己创建第三张表,使用 ORM 的 ManyToM ...
- python 全栈开发,Day98(路飞学城背景,django ContentType组件,表结构讲解)
昨日内容回顾 1. 为什么要做前后端分离? - 前后端交给不同的人来编写,职责划分明确. - API (IOS,安卓,PC,微信小程序...) - vue.js等框架编写前端时,会比之前写jQuery ...
- python django ORM
1.在models.py中创创建类 # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db imp ...
- Python - Django - ORM 操作表
ORM 的对应关系: 类 ---> 数据库表对象 ---> 数据库行属性 ---> 字段 操作数据库表 ---> ...
- Django ORM --- 建表、查询、删除基础
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射.它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的 ...
随机推荐
- [TypeScript] Modifier
TypeScript 2.8 adds the ability for a mapped type to either add or remove a particular modifier. Spe ...
- Mysql 查询阻塞和事物情况
MYSQL 服务器逻辑架构图 连接/线程处理 == > (解析器 –> 查询缓存) ===> 优化器 ===> 存储引擎 服务器级别锁MYSQL 使用的锁类型:表锁(显式:LO ...
- 使用对象,面向对象创建div的方式
<script> // //对象div的创建 // var div = document.createElement("div"); // document.body. ...
- 2.1 什么是C++
C++是一种通用程序设计语言,特别是面向系统程序设计. 1:是一个更好的C 2:支持数据抽象 3:支持面向对象的程序设计 4:支持通用型程序设计
- (尚010)Vue列表的搜素和排序
1.test010.html <!DOCTYPE html><html lang="en"><head> <meta charset=&q ...
- 特别的表格(overflow:hidden的一个小应用)
做多个li,对各个边的边框有不同的要求,三层盒子,第一层盒子放li,设置右边和下边的虚线边框,浮动,第二层盒子ul设置宽度使li排列,第三层盒子最大的盒子,使用overflow:hidden,宽度高度 ...
- 时间模块-datetime精确到微妙级
1.标准转换格式符号说明 %a 本地星期的短名称 如:Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE) %A 本地星期全名称 如 :Sunday, ...
- linux系统下常用的打包/解压缩包命令
此处大概列了常用的解压和打包命令,详细信息需要百度一一对比他们的区别,比如我们在下载软件时就是最好的实践. 用zip举例说明,使用命令压缩时有点是,压缩文件.目录会非常快:如图,我压缩了一个progr ...
- Python自动生成代码工具
项目中有一个需求,对一个基类而言,拥有一个比较方法和拷贝方法,某些地方需要频繁地对这两个方法进行调用.对于所有子类而言,需要重写这两个方法,并在其中维护类内一些成员变量.例如有一个变量m_iMyVal ...
- Java 学习之路(1)第一个Java程序
Hello World程序 在编程语言的世界里,第一个编程语言估计就是输出Hello World了吧. /** * 编写第一个Java程序,输出Hello World! * @author LJS * ...