SQLAlchemy 多态多对多关系

问题描述

sqlAlchemy 是否提供了一种方便的模式来使用单个表将多个类与另一个类相关联?例如,通过使用与“Tag”类的多态多对多关系使“Post”和“Video”类标记

我熟悉 Laravel PHP 框架中 many-to-many polymorphic relationships 的实现。此实现使用连接表中的 type 字段来区分“Post”和“Video”类。

示例:

posts
    id - integer
    name - string

videos
    id - integer
    name - string

tags
    id - integer
    name - string

taggables
    tag_id - integer
    taggable_id - integer
    taggable_type - string

我在 sqlAlchemy 中找不到类似的东西。据我了解,Polymorphism in SQLalchemy 仅限于类继承的模式。同样,association object pattern 似乎只允许两个类之间的关系。

是否推荐像我上面的例子那样的多态模式?还是通常为每个类定义带有“标签”的多对多关系更好?

解决方法

你绝对可以用 sqlalchemy 来实现这一点。

请阅读文档的 Examples: Generic Associations 部分了解各种选项。

您要查找的代码显示在 discriminator_on_association 代码段中。