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. Junit内部解密之三: 单元测试用例运行的全过程

    转自:http://blog.sina.com.cn/s/blog_6cf812be0100x8sb.html 我们以一个非常简单的TestCalculator类为例,只有一个测试方法: Public ...

  2. Linux_经常使用命令

    1. ls显示文件夹文件夹及文件使用方式: ls -lt -a 显示文件夹下全部文件及文件夹包括 . 与 .. -A 显示文件夹下全部文件及文件夹不包括 . 与 .. -l 显示文件夹下全部文件及文件 ...

  3. Cannot lock storage /tmp/hadoop-root/dfs/name. The directory is already locked.

    [root@nn01 bin]# ./hadoop namenode -format 12/05/21 06:13:51 INFO namenode.NameNode: STARTUP_MSG: /* ...

  4. Hadoop之MapReduce的两种任务模式

    http://qianshangding.iteye.com/blog/2259421 Hadoop之MapReduce的两种任务模式

  5. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  6. golang struct 定义中json``解析说明

    在代码学习过程中,发现struct定义中可以包含`json:"name"`的声明,所以在网上找了一些资料研究了一下 package main import ( "enco ...

  7. Android 浏览器文本垂直居中问题

    问题描述 在开发中,我们常使用 line-height 属性来实现文本的垂直居中,但是在安卓浏览器渲染中有一个常见的问题,就是对于小于12px的字体使用 line-height 属性进行垂直居中的时候 ...

  8. php 前台post多维数组

    post多维数组时,在后台用$_POST接收不正常,应使用$_REQUEST

  9. 转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC ----->JS

      目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 ...

  10. Laravel手记:执行route:cache时报LogicException

    laravel5的路由支持缓存.需要执行以下命令: php artisan route:cache 执行完毕后,报出以下错误: Route cache cleared! [LogicException ...