python第三篇:python、flask关系映射
python中关系映射主要包括三种:一对多关系映射、一对一关系映射、多对多关系映射。
一对多关系映射
一方:Student(学生)
添加关联属性和反向引用
多方:Article(文章)
添加外键关联 一对一关系映射
一方:Student(学生)主表
添加多对多的关联属性和反向引用,同时uselist取值为FALSE,表示fetchone
添加第三张表的关联属性和反向引用关系
一方:Detail(详情表)次表
添加外键关联 多对多关系映射
多方:Users
添加多对多的关联属性和反向引用,同时指明第三张关联表()
添加对第三张表的关联属性和反向引用()
多方:Goods
添加对第三张表的关联属性和反向引用()
第三张关联表:UsersGoods
一对多关系映射
# 一方
class Student(db.Model):
__tablename__ = "student"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(), nullable=False)
# 增加关联属性和反向引用关系
# 关联属性:在student对象中通过哪个属性能够得到对应的所有的article对象
# 反向引用:在article对象中通过哪个属性能够得到它对应的student
articles = db.relationship('Article', backref="student", lazy="dynamic") def __init__(self, name):
self.name = name def __repr__(self):
return "<Student:%r>" % self.name # 多方
class Article(db.Model):
__tablename__ = "article"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(), nullable=False)
# 增加一个列(外键):引用自article表的主键,这一段代码是为了生成数据库关联。
student_id = db.Column(db.Integer, db.ForeignKey('student.id')) # 这里的student是数据库表名 def __init__(self, name):
self.name = name def __repr__(self):
return "<Article:%r>" % self.tname
一对一关系映射
# 一方
class Student(db.Model):
__tablename__ = "student"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(), nullable=False)
# 增加关联属性和反向引用关系
# 关联属性:在student对象中通过哪个属性能够得到detail信息
# 反向引用:在detail对象中通过哪个属性能够得到它对应的student
# uselist is for the purpose of fetchone
user = db.relationship('Detail', backref='student', uselist=False) def __init__(self, name):
self.name = name def __repr__(self):
return "<Student:%r>" % self.name class Detail(db.Model):
__tablename__ = 'detial'
id = db.Column(db.Integer, primary_key=True)
weight = db.Column(db.Float)
student_id = db.Column(db.Integer, db.ForeignKey('student.id'))
多对多关系映射
class Users(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(),nullable=False,unique=True)
age = db.Column(db.Integer)
email = db.Column(db.String(),unique=True)
isActive = db.Column(db.Boolean,default=True) # 添加多(Users)对多(Goods)的关联属性和反向引用关系
# 涉及到第三张关联表 - users_goods
goods=db.relationship(
'Goods',
secondary='users_goods',
lazy="dynamic",
backref=db.backref(
"users",
lazy='dynamic')
) #增加对UsersGoods的关联属性和反向引用关系:目的是为了创建Users类 与 UsersGoods类 之间的关系
userGoods = db.relationship('UsersGoods',backref="user",lazy="dynamic") class Goods(db.Model):
__tablename__ = "goods"
id = db.Column(db.Integer,primary_key=True)
gname = db.Column(db.String())
gprice = db.Column(db.Float) #增加对UsersGoods类的关联属性和反向引用关系
goodUsers = db.relationship('UsersGoods',backref="good",lazy="dynamic") # 创建 users_goods 的第三张关联表,从而来表示多对多的关系
class UsersGoods(db.Model):
__tablename__ = "users_goods"
id = db.Column(db.Integer,primary_key=True)
users_id = db.Column(db.Integer,db.ForeignKey('users.id'))
goods_id = db.Column(db.Integer,db.ForeignKey('goods.id'))
count = db.Column(db.Integer,default=) # user.goods
# user.userGoods
# good.users
# good.goodUsers
# goodUsers.good
# userGoods.user
python第三篇:python、flask关系映射的更多相关文章
- 【0728 | 预习】第三篇 Python基础
第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...
- [Python之路] ORM(对象关系映射)
一.概念 ORM是Python后端Web框架Django的核心思想,"Object Relational Mapping",即对象-关系映射,简称ORM. 一句话理解就是: 创建一 ...
- Python 第三篇(上):python文件基础操作、json模块、lambda、map、filter、reduce和函数位置参数
python一切皆对象,linux一切皆文件,python操作文件是很常见的O/I操作,其内置来open()函数可以完成文件的基本操作: 一:使用内置open()函数操作文件,基本语法如下: with ...
- Hibernate(三)——框架中的关系映射
在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...
- Python开发 第一篇 python的前世今生
Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
- 【Python之路】第三篇--Python基本数据类型
运算符 1.算数运算: # 在py2的 取整除运算中 9//2 = 4.0 # 引入 from __future__ import division 9//2 = 4.5 # py3中不需要! 2.比 ...
- 第三篇 Python关于mysql的API--pymysql模块, mysql事务
python关于mysql的API--pymysql模块 pymysql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install pymys ...
- 第三篇 Python执行方式和变量初始
第一个Python程序 可以打开notepad或者其他文本编辑器,输入:print("Hello Python!"),将文件保存到任意盘符下,后缀名是 .py 两种python程 ...
随机推荐
- js 正则匹配 域名【host】
如果直接在js中是可以直接取到hostname的,以下方式是通过正则匹配: var url = "http://www.cnblogs.com/cench" var reg = / ...
- Redis学习笔记-Redis内部数据结构
Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...
- dedecms增加自定义表单管理员
打开\dede\inc\grouplist.txt 添加 >>自定义表单 >f_List>列出表单 >f_New>新建表单 >f_Edit>编辑表单 & ...
- mysql海量数据条件删除
1. 问题描述:现在存在两个表,具体表结构及记录数如下所示: mysql> desc user_mapping; +------------+------------------+------+ ...
- Domino Angular 前端UI开发
因为如今前端的要求越来越专业化,不少企业已经有前端的专业职位了.当然我们dominio软件企业.有些也在特意招一些前端的project师. 比方如今流程的多平台(之前我的有教程).就必需要有专业的UI ...
- USB设备驱动程序(一)
USB驱动编程原理: 当我们把USB设备插入USB口时会提示需要安装相对应的驱动,如USB鼠标.USB键盘等,这些电脑自己自身已经自带有相对于的驱动程序, 当电脑检查到该USB设备类型相同就去帮你安装 ...
- Oracle11g完全卸载方法
一.在oracle11G以前卸载oracle会存在卸载不干净,导致再次安装失败的情况,在运行services.msc打开服务,停止Oracle的所有服务. 二. oracle11G自带一个卸载批处理\ ...
- 九度OJ 1183:守形数 (数字特性)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3815 解决:2005 题目描述: 守形数是这样一种整数,它的平方的低位部分等于它本身. 比如25的平方是625,低位部分是25,因此25是 ...
- netstat命令简单使用
1.适用范围 该命令用于打印网络连接.路由表.接口统计.伪装连接.多播成员等信息. (netstat已经过时,现在使用ss命令,所以本文不会作过多翻译,只着重一些重要部分) 2.语法概览 netsta ...
- 学院名单-211院校研招学院-中国教育在线(www.eol.cn)170915164402
[数据结果] 学校数.学院数:112,2657. [数据来源] 中国教育在线(www.eol.cn)211院校研招学院. http://www.eol.cn/html/ky/gxmd/211.shtm ...