一对多就是主键与外键的关系,通过一个用户表,角色表进行举例子

角色表role:有外键,对应的是user表的主键

用户表users:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:123456@127.0.0.1:3306/rupeng"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False db=SQLAlchemy(app) # 角色 1的一方
class Role(db.Model):
__tablename__="role"
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(20),unique=True)
# backref在这行代码的作用是:给前面的User添加一个属性,名字焦作backref的值
# 以便可以直接通过user.role方法到一的一方的数据
users=db.relationship("User",backref="role")
def __repr__(self):
return "%d,%s" %(self.id,self.name) # 用户 多的一方
class User(db.Model):
__tablename__="users"
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(20),unique=True)
# 设置外键
role_id=db.Column(db.Integer,db.ForeignKey(Role.id)) def __repr__(self):
return "%d %s" %(self.id,self.name) @app.route("/")
def index():
return "index" @app.route("/show")
def Show():
# user=Role().query.all()
role=Role.query.get(1)
user=User.query.get(3)
# print(role.id,role.name)
# 查询id=2(user角色下的用户都有谁)
print(role.users)
print(user.role)
return render_template("showdata.html") if __name__ == '__main__':
db.drop_all()
db.create_all() ro1=Role(name='admin')
ro2=Role(name='user')
db.session.add_all([ro1,ro2])
db.session.commit() user1=User(name='laowang',role_id=ro1.id)
user2=User(name='laoli',role_id=ro1.id)
user3=User(name='laozhang',role_id=ro2.id)
db.session.add_all([user1,user2,user3]) db.session.commit()
app.run(debug=True)

上面的代码就是创建了一个一对多的关系。

3.ORM框架一对多的关系及使用的更多相关文章

  1. orm框架与缓存的关系

    1.mybatis规定,一级缓存没必要bean类实现序列化,但二级缓存bean类必须实现序列化. 因为二级缓存是基于namespace的也就是基于接口的,二级缓存可以设置存储源,可以是redis或者m ...

  2. ORM框架是什么

    ORM框架是什么 对象关系映射,目前数据库是关系型数据库  ORM 主要是把数据库中的关系数据映射称为程序中的对象 目前集中常见的ORM框架1  Nhibernate原因:用的比较多,资料也比较好找. ...

  3. ORM框架之SQLALchemy

    一.面向对象应用场景: 1.函数有共同参数,解决参数不断重用: 2.模板(约束同一类事物的,属性和行为) 3.函数编程和面向对象区别: 面向对象:数据和逻辑组合在一起:函数编程:数据和逻辑不能组合在一 ...

  4. ORM框架(对象关系映射)

    Entity Framework 学习初级篇1--EF基本概况 http://www.cnblogs.com/xray2005/archive/2009/05/07/1452033.html ORM  ...

  5. Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)

    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...

  6. 对象关系映射(ORM)框架GreenDao简介和基本使用

    官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案. GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的A ...

  7. java框架篇---hibernate(一对多)映射关系

    一对多关系可以分为单向和双向. 一对多关系单向 单向就是只能从一方找到另一方,通常是从主控类找到拥有外键的类(表).比如一个母亲可以有多个孩子,并且孩子有母亲的主键作为外键.母亲与孩子的关系就是一对多 ...

  8. flask SQLAlchemy中一对多的关系实现

    SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如 ...

  9. Python操作mysql之SQLAchemy(ORM框架)

    SQLAchemy SQLAchemy 解析: SQLAchemy是python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作, 简言之便是:将对象转换成SQ ...

随机推荐

  1. layui-table 样式

    <!DOCTYPE html> <html> <head> <style> #lay-table { background-color: #fff; c ...

  2. opencv编译静态库时选择MD模式无效的原因

    在Cmake-gui上看到的明明是MD运行库依赖,生成MS项目时却变成了MT运行库依赖. 原因在于编译静态库时内部做了自动替换.

  3. List 数据分批入库

    直接贴代码,主要运用 List<E> subList(int fromIndex, int toIndex); 把 List 分割 /** * 保存批价结果 * * @param pric ...

  4. 在一个C程序中,main()函数可以放在哪?

    C语言规定,在一个C程序中,main()函数的位置(). A.必须在系统调用的库函数之后 B.必须在程序的开始 C.必须在程序的最后 D.可以在任意位置 答案:D [解析] 每个C程序有且只有一个主函 ...

  5. 洛谷 P2709 小B的询问(莫队)

    题目链接:https://www.luogu.com.cn/problem/P2709 这道题是模板莫队,然后$i$在$[l,r]$区间内的个数就是$vis[ ]$数组 $add()$和$del()$ ...

  6. blog主题——黑夜

    blog主题,存储一下 /* Author: Io_oTI*/ /*Public*/ * { margin: 0; padding: 0; box-sizing: border-box; trans ...

  7. Coursera-吴恩达机器学习课程笔记-Week1

    参考资料: 吴恩达教授机器学习课程 机器学习课程中文笔记 Week 1 一. 引言 机器学习模型可分为监督学习Superviese learning(每个数据集给出了正确的值)和无监督学习Unsupe ...

  8. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

  9. Spring Boot 编辑器 IDEA 免费许可申请

    最近 IDEA 陆续到期(试用版)听说可以申请开源许可,试试吧. 点击 https://www.jetbrains.com/shop/eform/opensource?product=ALL 填写相关 ...

  10. 重新梳理IT知识之java-05面向对象(一)

    一.Java面向对象学习的三条主线: 1.Java类及类的成员:属性.方法.构造器:代码块.内部类 2.面向对象的三大特征:封装性.继承性.多态性.(抽象性) 3.其他关键字:this.super.s ...