Python Sqlalchemy类无法将关系转换为集合

Python Sqlalchemy类无法将关系转换为集合,python,sqlalchemy,many-to-many,set,one-to-many,Python,Sqlalchemy,Many To Many,Set,One To Many,我正在尝试将多对多关系中的一对多部分转换为python集()。有关代码,请参见以下播放示例: message_tos = Table('message_tos', Base.metadata, Column('message_id', Integer, ForeignKey('message.id')), Column('address_id', Integer, ForeignKey('address.id'))

我正在尝试将多对多关系中的一对多部分转换为python集()。有关代码,请参见以下播放示例:

message_tos = Table('message_tos', Base.metadata,                                
    Column('message_id', Integer, ForeignKey('message.id')), 
    Column('address_id', Integer, ForeignKey('address.id'))
)

class Address(Base):
    address = Column(String, nullable=False, unique=True)
    emails = relationship('Message')

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

class Email(Base):
    from = relationship('Address', backref='from')
    to = relationship('Address', secondary=message_tos, backref='messages_to')
    message_id = Column(String, nullable=False, unique=True)

...

def whatever(*args, **kwargs):
    """
        ...
    """
    email = session.query(Email).filter(Email.message_id==message_id).first()
    blah = set(email.to).union(email.from) # This lines throws an error that Address is not iterable

是否有任何方法可以运行
集合(email.to)
代码(将地址对象放入集合中),或者我的方法完全错误?显然,我可以只做set([email.to]),但是这是一个额外的复杂度顺序(这个函数可能会被多次调用,并且可能有很长的.to或.from列表),我不希望有这些(

您的错误最有可能发生在
集合(email.to)
部分,而发生在
.union(email.from)
中,因为
电子邮件.from
不可编辑。根据您的代码,
email.from
地址的一个实例

这应该可以做到:
blah=set(email.to).union([email.from])
。我假设它没有真正从
调用属性
,因为它在python中是一个保留关键字。我想发送者是个好名字


还请注意,在SA中,通过以下方法可以更清楚地搜索主键:


是的,在实际代码中,它不是从
中调用的
;我认为清晰比精确的代码好。也感谢您搜索pkey提示(尽管在本例中,message_id实际上不是主键(我可能应该重新设计此部分))!
email = session.query(Email).get(message_id)