【问题标题】:Accessing extra column in many-to-many relationship with simplified association objects使用简化的关联对象访问多对多关系中的额外列
【发布时间】:2013-05-07 00:06:47
【问题描述】:

我正在尝试使用SQLAlchemy docs: Simplifying Association Objects 中的示例

我正在努力理解的是如何访问 special_key。最终我希望能够做这样的事情:

for user in users
    for keyword in user.keywords
        keyword.special_key

这是示例中的代码:

class User(Base):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String(64))

# association proxy of "user_keywords" collection
# to "keyword" attribute
keywords = association_proxy('user_keywords', 'keyword')

def __init__(self, name):
    self.name = name

class UserKeyword(Base):
__tablename__ = 'user_keyword'
user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
keyword_id = Column(Integer, ForeignKey('keyword.id'), primary_key=True)
special_key = Column(String(50))

# bidirectional attribute/collection of "user"/"user_keywords"
user = relationship(User,
            backref=backref("user_keywords",
                            cascade="all, delete-orphan")
        )

# reference to the "Keyword" object
keyword = relationship("Keyword")

def __init__(self, keyword=None, user=None, special_key=None):
    self.user = user
    self.keyword = keyword
    self.special_key = special_key

class Keyword(Base):
__tablename__ = 'keyword'
id = Column(Integer, primary_key=True)
keyword = Column('keyword', String(64))

def __init__(self, keyword):
    self.keyword = keyword

def __repr__(self):
    return 'Keyword(%s)' % repr(self.keyword)

我在这里遵循这种模式是否走在正确的轨道上?

我的目标本质上是多对多,带有一个包含布尔值的额外列。

【问题讨论】:

    标签: sqlalchemy


    【解决方案1】:

    这应该可行:

    for user in users:
        for keyword in user.user_keywords:
            print keyword.special_key
    

    【讨论】:

      猜你喜欢
      • 2019-10-16
      • 2017-12-23
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2017-08-24
      • 2018-11-24
      • 2023-02-02
      相关资源
      最近更新 更多