SQLALCHEMY采用adjacency list pattern来表示类的自引用。

例如,对于类Node自引用:

class Node(Base):
__tablename__='node'
id=Column(Integer,primary_key=True)
parent_id=Column(Integer,ForeignKey('node.id'))
data=Column(String(50))
children=relationship('Node')

对于如下图所示的结构:

root--------------->child1

-------->child2---------->subchild1

---------->subchild2

-------->child3

可能有如下数据:

id parent_id data

1 NULL root

2 1 child1

3 1 child2

4 3 subchild1

5 3 subchild2

6 1 child3

无论自引用是一对多还是多对一,通常默认是一对多。如果想建立多对一的关系,需要在relationship()中添加remote_side属性,remote_side属性包含一列或多列。如:

class Node(Base):
__tablename__='node'
id=Column(Integer,primary_key=True)
parent_id=Column(Integer,ForeignKey('node.id'))
data=Column(String(50))
parent=relationship("Node",remote_side=[id])

最新文章

  1. js模块化历程
  2. Delphi 获取临时数据集 ClientDataSet
  3. CEUtils---我在Unity中使用的一些小类库(不断更新中)
  4. QtSpim实现MIPS指令的编写
  5. boost-内存管理
  6. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-004-消除bean自动装配的歧义@Primary
  7. 优质办公体验,掌上OA一机hold住全场
  8. MySQL--连接属性
  9. 50行实现简易HTTP服务器
  10. 交互式shell和非交互式shell的区别
  11. js中的数组对象排序(方法sort()详细介绍)
  12. GPU版的tensorflow在windows上的安装时的错误解决方案
  13. three.js实现3D模型展示
  14. selenium 操作键盘
  15. Forword(请求转发)与Redirect(重定向) 区别
  16. 深入解析SQL Server高可用镜像实现原理
  17. ctrl+E 快速显示当前打开的编辑列表
  18. javascript数据结构与算法--二叉树(插入节点、生成二叉树)
  19. zoj 2587 判断最小割的唯一性
  20. 20155234 2016-2017-2 《Java程序设计》第2周学习总结

热门文章

  1. 如何去除vue项目中的 # --- History模式
  2. ThinkPhp框架对“数据库”的基本操作
  3. AndroBench手机性能测试
  4. android build 编译打印详细过程
  5. mssql sqlserver 使用sql脚本输出交替不同的背景色的html信息的方法分享
  6. 洗礼灵魂,修炼python(86)--全栈项目实战篇(12)—— 利用socket实现文件传输/并发式聊天
  7. Powershell测试端口状态
  8. ALTER添加列后,立即UPDATE该列会报错
  9. Android长时间定时任务实现
  10. 转:敏捷开发之Scrum扫盲篇