sqlalchemy多对多关系的中间表,可以增加其他字段吗?

Andy
  • 11

例如我有两个表用户表和视频表,user和video表,用来记录用户观看视频。二者为多对多关系。按照sqlalchemy惯例,往往都是建一个中间表。

user_video = Table('user_video', Base.metadata,
                   Column('user_id', ForeignKey('user.id'), primary_key=True),
                   Column('video_id', ForeignKey('video.id'), primary_key=True))

这时我想需要统计一个每个用户的每个视频的观看时长的字段,如果我直接加在中间表上一个time字段,感觉就很方便,原来用sql语句做过类似的表,但是不知道加上之后怎么用sqlalchemy的语法操作,还是说这样行不行得通?

回复
阅读 1.9k
2 个回答
✓ 已被采纳

最后还是自己在官方文档里找到了答案:Association Object
代码如下:


class Association(Base):
    __tablename__ = 'association'
    left_id = Column(Integer, ForeignKey('left.id'), primary_key=True)
    right_id = Column(Integer, ForeignKey('right.id'), primary_key=True)
    extra_data = Column(String(50))
    child = relationship("Child", back_populates="parents")
    parent = relationship("Parent", back_populates="children")

class Parent(Base):
    __tablename__ = 'left'
    id = Column(Integer, primary_key=True)
    children = relationship("Association", back_populates="parent")

class Child(Base):
    __tablename__ = 'right'
    id = Column(Integer, primary_key=True)
    parents = relationship("Association", back_populates="child")

意思是中间表再和父子表建立关系。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏