关于炼金术和连接有一个奇怪的问题

2024-04-25 00:08:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我将电子邮件地址保存在两个表中:userid和domain。模型如下所示:

class Email():
    id = Column(Integer, primary_key=True)
    parent_id = Column(Unicode, ForeignKey('domain.id'))
    parent = relationship('Domain')
    userid = Column(Unicode)

class Domain():
    id = Column(Integer, primary_key=True)
    host = Column(Unicode)

我突然开始对连接有问题。当我做以下事情时,我总是一无所获:

def get_email(email):
    fragments = email.lower().split(u'@')
    return DBSession().query(Email).filter(Email.userid == fragments[0]).join(Domain, Domain.id == Email.parent_id).filter(Domain.host == fragments[1]).first()

但是如果我将这个连接分为两个查询,我将检索到正确的对象:

def get_email(email):
    fragments = email.lower().split(u'@')
    session = DBSession()
    thehost = session.query(Domain).filter(Domain.host == fragments[1]).first()
    return session.query(Email).filter(Email.userid == fragments[0]).filter(Email.parent_id == thehost.id).first()

有人知道我做错了什么,或者我应该如何解决问题吗?我花了30分钟都没用。。。谢谢!你知道吗


Tags: idhostemailsessiondomainunicodecolumnfilter