0
我將電子郵件地址保存在兩個表中:userid和domain。模型看起來像這樣:SQLAlchemy和連接有一個奇怪的問題
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分鐘無濟於事......謝謝!
「域」類實際上是否具有「id」屬性?你忘了在你的例子中顯示它? 無關的建議,我不會使用'local'作爲變量名稱,因爲它與內置函數local()衝突。 –
是的。是的,我剛剛結束了使用片段,而不是命名每個片段,因爲我認爲本地這個詞是一個問題,但這並沒有幫助。 –
爲什麼'Email.parent_id'的類型是'Unicode',而'Domain.id'是'Integer'?順便說一句,你可以省略'ForeignKey'列的類型來讓SQLAlchemy推斷它。 –