gpt4 book ai didi

python - Sqlalchemy 类不可迭代/无法将关系转换为集合

转载 作者:行者123 更新时间:2023-12-01 05:59:00 26 4
gpt4 key购买 nike

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

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

有什么方法可以运行 set(email.to) 代码(将 Address 对象放入集合中),还是我的处理方式完全错误?显然,我可以只执行 set([email.to]),但是这是一个额外的复杂顺序(并且此函数可能会被多次调用,并且可能有非常长的 .to 或 .from 列表)我宁愿没有

最佳答案

您的错误很可能不是发生在 set(email.to) 部分,而是发生在 .union(email.from) 中,因为 email. from 是不可迭代的。根据您的代码,email.fromAddress 的实例。

这应该可以工作:blah = set(email.to).union([email.from])我认为并没有真正调用属性from,因为它是Python中的保留关键字。我想 sender 是个好名字。

<小时/>

另请注意,在 SA 中,使用 Query.get 可以更清晰地搜索主键。 :

email = session.query(Email).get(message_id)

关于python - Sqlalchemy 类不可迭代/无法将关系转换为集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11356420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com