SQLAlchemy中的自引用

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])

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java小白

MySQL WHERE子句内使用正则表达式搜索

18850
来自专栏calmound

设计模式--单例模式Singleton

单例模式顾名思义整个程序下只有一个实例,例如一个国家只有一个皇帝,一个军队只有一个将军。 单例模式的书写又分为饿汉模式和懒汉模式 饿汉模式    类中代码 pa...

29390
来自专栏iOS 开发杂谈

浅谈 Objective-C Associated Objects

Associated Objects 是 Objective-C 2.0 中 Runtime 的特性之一。 在 <objc/runtime.h> 中定义的三个...

12530
来自专栏吴伟祥

自定义template(Settings-->Live Templates)

psvm=public static void main(String[] args) {}

9720
来自专栏十月梦想

mysql数据类型

mysql数据的数据类型,指定了字段的类型,不符合指定的字段类型,传入的值则会提示错误;

9740
来自专栏Python

sqlalchemy和flask-sqlalchemy的几种分页方法

sqlalchemy中使用query查询,而flask-sqlalchemy中使用basequery查询,他们是子类与父类的关系 假设 page_index=1...

598100
来自专栏IT杂记

Mapreduce程序中reduce的Iterable参数迭代出是同一个对象

今天在对reduce的参数Iterable进行迭代时,发现一个问题,即Iterator的next()方法每次返回的是同一个对象,next()只是修改了Writa...

21050
来自专栏Laoqi's Linux运维专列

SQLAlchemy总结+

38930
来自专栏猿人谷

Mysql字符串截取总结:left()、right()、substring()、substring_index()

在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处...

35100
来自专栏猿人谷

Mysql字符串截取总结:left()、right()、substring()、substring_index()

在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些,mysql有很多字符串函数可以用来处理...

30450

扫码关注云+社区

领取腾讯云代金券