关系是描述现实世界的实体及其之间各种联系的单一的数据结构。
对于使用 SQLAlchemy 建立数据表之间的关系前面的文章 SQLAlchemy 定义关系 已经进行了介绍,今天主要看单个数据表之内的关联。
数据表内的一对多关系
数据表自关联的一对多关系,典型的就是父亲和子女的关系。我们通过在表中引用父亲的 id 来实现,然后通过反向链接来获取子女的信息。在这里我们使用 user 和其关注者来实现数据类。
在以上示例中,可以通过 follwers 来获取被关注者的信息,而被关注者可以通过反向链接来获取关注者的信息,在这里我们假设一个用户只能关注一个人,一个用户可以被多个用户关注。
使用 SQLAlchemy 的完整示例代码如下:
以上示例的运行结果如下:
数据表内的多对多关系
数据表内自关联多对多关系的实例那就更多了,比如完整的关注者和被关注者的关系、python 中父类与子类的关系等等。在 SQLAlchemy 中多对多的关系需要借助于关系表来实现,自关联多对多的关系也同样需要关联表,只是关联表中关联的是同一个数据表。
建立关系表后,需要通过 relationship 来建立关系,在两个数据表的多对多关系中,只需要指定 secondary 参数为关系表即可,但是在自关联关系表中的 followerid 和 follwedid 指向的是同一个数据表的 id,SQLAlchemy 是无法区分二者的,此时我们需要通过其他的方法来加以区分。
此时需要借助 relationship 的 primaryjoin 参数和 secondaryjoin 参数。primaryjoin 表达式描述了左表和连接表之间的连接, secondaryjoin 描述了连接表和右表之间的连接.
在使用中我们可以通过 followed 来获取关注者列表,通过 followers 来获取被关注则列表。但是实际上 followed 和 followers 是两个不同的 SQL 语句,我们可以通过 print 来打印者两个语句,语句的内容如下:
1. user.followed 内容如下
2. user.followers 内容如下
社区
活动
资源
关于
腾讯云开发者
扫码关注腾讯云开发者
领取腾讯云代金券
热门产品
热门推荐
更多推荐
Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2024 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有