2

我正在尝试使用SQLAlchemy 文档中的示例:简化关联对象

我正在努力理解的是如何访问 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)

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

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

4

1 回答 1

1

这应该有效:

for user in users:
    for keyword in user.user_keywords:
        print keyword.special_key
于 2013-05-06T16:06:47.493 回答