多对多的定义可以使用关联表,或者重新定义一个模型,通过模型定义多对多的自引用在flask web开发书里有讲到,这里主要演示用关联表定义的方法。

from flask_sqlalchemy import SQLAlchemy
from flask import Flask app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
follows=db.Table('follows',
db.Column('follower_id',db.Integer,db.ForeignKey('users.id')),
db.Column('followed_id',db.Integer,db.ForeignKey('users.id')))
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True) followers=db.relationship('User',
secondary=follows,
primaryjoin=id==follows.c.followed_id,
secondaryjoin=id==follows.c.follower_id,
backref=db.backref('followed',lazy='dynamic'),
lazy='dynamic')
u1,u2=User(username='u1'),User(username='u2')
u1.followed.append(u2)
print "u1 following :",u1.followed[0].username
print "u2 followers :",u2.followers[0].username

表中定义了关注的人,和粉丝两个字段。主要需要设置primaryjoin跟secondaryjoin参数

flask sqlchemy 多对多的自引用关系定义的更多相关文章

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

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

  2. 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射

    使用Code First建模自引用关系笔记   原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasR ...

  3. 如何理解Nginx, WSGI, Flask(Django)之间的关系

    如何理解Nginx, WSGI, Flask(Django)之间的关系 值得指出的是,WSGI 是一种协议,需要区分几个相近的名词: uwsgi 同 wsgi 一样也是一种协议,uWSGI服务器正是使 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (6) -----第二章 实体数据建模基础之使用Code First建模自引用关系

    2-5 使用Code First建模自引用关系 问题 你的数据库中一张自引用的表,你想使用Code First 将其建模成一个包含自关联的实体. 解决方案 我们假设你有如图2-14所示的数据库关系图的 ...

  5. 三大框架 之 Hibernate查询(一对多、多对多、查询关系)

    目录 一对多 表之间关系 表之间关系建表原则 一对多关系配置 建立表 建立ORM 添加配置文件 在hibernate.cfg.xml中的标签里,添加核心配置文件 引入工具类 编写测试类 级联操作 什么 ...

  6. Flask 数据库多对多关系

    数据库使用关系建立记录之间的联系.其中,一对多关系是最常用的关系类型,它把一个记录和一组相关的记录联系在一起.实现这种关系时,要在“多”这一侧加入一个外键,指向“一”这一侧联接的记录.大部分的其他关系 ...

  7. flask中 多对多的关系 主从表之间的的增删改查

    # 角色表模型class Role(db.Model): r_id = db.Column(db.Integer, primary_key=True) r_name = db.Column(db.St ...

  8. hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系

    前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hi ...

  9. JPA学习---第十一节:JPA中的多对多双向关联实体定义与注解设置及操作

    1.定义实体类,代码如下: (1).学生实体类: package learn.jpa.entity; import java.util.HashSet; import java.util.Set; i ...

随机推荐

  1. TCP/IP协议示意图

    TCP/IP协议示意图

  2. 【分布式锁】redis实现

    转载:https://www.jianshu.com/p/c970cc710SETNX命令简介 SETNX key value 将key的值设为value,并且仅当key不存在. 若给定的key已经存 ...

  3. Jenkins 部署自动化测试脚本(15)

    自动化测试脚本开发完成以后,希望可以把脚本放在公共的环境下提供一个入口供大家一起使用,目前最好的解决方案就是需要把代码部署在Jenkins上,下面看下如何在Jenkins配合自动化测试任务: 1.首先 ...

  4. MySQL更改命令行默认分隔符

    MySQL命令行默认语句分隔符为分号  ; 使用DELIMITER命令可以更改默认分隔符 mysql> DELIMITER   // 将默认分割符改为  //

  5. InnoDB 存储引擎的特点及优化方法

    InnoDB:   InnoDB 引擎是MySQL数据库的另一个重要的存储引擎.被包含在所有的二进制安装包里面.和其它的存储引擎相比.InnoDB引擎的优点是支持兼容ACID的事物.以及参数完整性(有 ...

  6. RAMOS和SSD对比

    http://bbs.pcbeta.com/forum.php?mod=redirect&goto=findpost&ptid=1786284&pid=48341400RAMO ...

  7. DApp demo之pet-shop

    注意: 这里使用的truffle版本为4.1.4,貌似使用高版本在truffle test时候会出问题,提示 truffle/Assert.sol is not found等错误 使用Truffle ...

  8. keepalived+nginx实现niginx高可用,宕机自动重启

    nginx作为http服务器,在集群中 用于接受客户单发送过来的请求,并且根据配置的策略将请求 转发给具体的哪台服务器 如果在nginx服务器使用轮询策略处理客户端的请求,出现了tomcat 宕机的情 ...

  9. Ubuntu14.04 使用本地摄像头跑ORB SLAM2(暂未完成)

    嗯 这个方法我暂时弄不出来,用了另外一个方法:SLAM14讲 第一次课 使用摄像头或视频运行 ORB-SLAM2 前面的准备: Ubuntu14.04安装 ROS 安装步骤和问题总结 Ubuntu14 ...

  10. MYSQL-联合索引

    深入理解 index merge 是使用索引进行优化的重要基础之一.理解了 index merge 技术,我们才知道应该如何在表上建立索引. 1. 为什么会有index merge 我们的 where ...