Возникла странная проблема с SQLAlchemy и объединениями - PullRequest
0 голосов
/ 13 декабря 2011

Я сохраняю адреса электронной почты в двух таблицах: идентификатор пользователя и домен. Модель выглядит примерно так:

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)

У меня внезапно начались проблемы с объединениями. Когда я делаю следующее, я всегда получаю None:

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 минут безрезультатно ... Спасибо!

1 Ответ

0 голосов
/ 30 декабря 2011

Разобрался с проблемой.Пришлось делать с наследованием и алиасами.Урок: при объединении двух объектов, унаследованных от одного и того же объекта, создайте псевдоним хотя бы одного из объектов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...