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关系映射的更多相关文章

  1. 【0728 | 预习】第三篇 Python基础

    第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...

  2. [Python之路] ORM(对象关系映射)

    一.概念 ORM是Python后端Web框架Django的核心思想,"Object Relational Mapping",即对象-关系映射,简称ORM. 一句话理解就是: 创建一 ...

  3. Python 第三篇(上):python文件基础操作、json模块、lambda、map、filter、reduce和函数位置参数

    python一切皆对象,linux一切皆文件,python操作文件是很常见的O/I操作,其内置来open()函数可以完成文件的基本操作: 一:使用内置open()函数操作文件,基本语法如下: with ...

  4. Hibernate(三)——框架中的关系映射

    在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...

  5. Python开发 第一篇 python的前世今生

    Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...

  6. Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数

     一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...

  7. 【Python之路】第三篇--Python基本数据类型

    运算符 1.算数运算: # 在py2的 取整除运算中 9//2 = 4.0 # 引入 from __future__ import division 9//2 = 4.5 # py3中不需要! 2.比 ...

  8. 第三篇 Python关于mysql的API--pymysql模块, mysql事务

    python关于mysql的API--pymysql模块 pymysql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install pymys ...

  9. 第三篇 Python执行方式和变量初始

    第一个Python程序 可以打开notepad或者其他文本编辑器,输入:print("Hello Python!"),将文件保存到任意盘符下,后缀名是  .py 两种python程 ...

随机推荐

  1. POJ 3252 Round Numbers 数学题解

    Description The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, P ...

  2. .Vue 文件 ES6 语法 webstorm 中的一个识别Bug

    webstorm 2017 版本中即使安装了vue template file 设置了 js 语言为 es6 语法仍旧会出现识别不了划线的情况,苦寻很久,最后解决方式如下 <script typ ...

  3. [译]GLUT教程 - 整合代码5

    Lighthouse3d.com >> GLUT Tutorial >> Extras >> The Code So Far V 该代码与位图字体的代码类似.区别是 ...

  4. 篇一、安装配置Android Studio

    系统:Mac 10.10 Java JDK:官方JDK1.8 IDE:Android Studio 1.2 Android SDK:24.2 模拟器:genymtion 安装 Mac版本的Androi ...

  5. Educational Codeforces Round 27 F. Guards In The Storehouse

    F. Guards In The Storehouse time limit per test 1.5 seconds memory limit per test 512 megabytes inpu ...

  6. Android Studio中常用设置

    参考资料: 1.http://blog.csdn.net/itdada/article/details/43375893 常用设置: 1.Tab不用4个空格Code Style->Java-&g ...

  7. android webview 加载本地html 实现 与 java 之间的相互响应

    1.布局 <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:androi ...

  8. Java泛型的应用

    一.泛型类 package generics; /** * 泛型类,格式:public class 类名<泛型类型1, ...> * @author zhongfg * @date 201 ...

  9. 新升级!EasyNVR3.0功能概述--直播与录像

    背景介绍: 对于摄像机直播已经是我们司空见惯的需求,但是,许多用户在现有的直播的基础上更有录像的需求,并且有关于录像的删除定时等录像计划的需求,更有客户不仅需要这些功能,还需要将这些功能集成到自身的业 ...

  10. 九度OJ 1333:考研海报 (区间操作)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:738 解决:299 题目描述: sun是万千考研学子中的一员,他每天过着三点一线的生活. 学校里有一个公告栏,他每天都看到上面张贴着各种考研 ...