我需要实现一个“相关项目”功能,即允许同一个表中的项目以多对多的方式任意链接。类似于新闻网站显示相关文章的方式。
另外,我需要这种关系是双向的,如下所示:
a = Item()
b = Item()
a.related.append(b)
assert a in b.related # True
现在,在 SQL 级别上,我想这可以通过修改“标准”多对多关系来解决,因此每次进行关联时都会将 2 条记录插入关联表中,因此 (a -> b) 和 (b - > a) 是两个独立的记录。
或者,多对多表的连接条件可以以某种方式检查关联的双方,所以粗略地而不是... JOIN assoc ON a.id = assoc.left_id ...
SQLAlchemy 会产生类似的东西... JOIN assoc ON a.id = assoc.left_id OR a.id = assoc.right_id ...
有没有办法用 SQLAlchemy 配置它,所以关系的工作方式类似于“正常”的多对多关系?
很可能我只是不知道正确的术语——我想出的所有东西——“自我引用”、“双向”、“关联”——都被用来描述 SQLAlchemy 中的其他东西。