我想獲得一個類的實例,該字段是一個外鍵過濾,但是當我嘗試這樣做時,我總是獲取數據庫中的所有條目,而不是符合標準的那些。SqlAlchemy - 按字段過濾定義爲ForeignKey
比方說,我有幾個類在簡單關係N:1中使用聲明性基礎。我有一個模擬像:
#!/usr/bin/python2.6
class ContainerClass(declarativeBase):
__tablename__ = "container_classes"
_id = Column("id", Integer, primary_key=True)
id = sqlalchemy.orm.synonym('_id', descriptor=property(getId, setId))
class WhateverClass(declarativeBase):
__tablename__ = "whatever_classes"
_id = Column("id", Integer, primary_key=True)
_total = Column("total", Integer)
_containerClassId = Column("container_class_id", Integer, ForeignKey("other_classes.id"))
_containerClass = relationship("ContainerClass", uselist=False)
id = sqlalchemy.orm.synonym('_id', descriptor=property(getId, setId))
total = sqlalchemy.orm.synonym('_total', descriptor=property(getTotal, setTotal))
containerClassId = sqlalchemy.orm.synonym('_containerClassId', decriptor=property(getContainerClassId, setContainerClassId))
containerClass = sqlalchemy.orm.synonym('_containerClass', descriptor=property(getContainerClass setContainerClass))
「WhateverClass」的實例可以屬於「ContainerClass」的一個實例(每個ContainerClass可以有WhateverClass的多個實例)。關係似乎工作正常。如果我向「ContainerClass」添加一個新的「WhateverClass」,那麼whateverClass.containerClassId會正確獲取它所屬的ContainerClass的值。
但是讓我們假設我需要獲取屬於「id = 5」的「ContainerClass」的「WhateverClass」實例列表。
如果我嘗試這樣做:
from myClasses import WhateverClass
session.query(WhateverClass.WhateverClass).filter(WhateverClass.WhateverClass.containerClass.id == 5).all()
我得到存儲在數據庫中的WhateverClass的所有實例,不僅誰是鏈接到ContainerClass id爲==的那些5
但如果我這樣做session.query(WhateverClass.WhateverClass).filter(總計< = 100).all()我正確地得到WhateverClass的「總」字段爲< = 100的實例。
我很新手sqlalchemy ...我必須使用加入的查詢或類似的東西?我知道它不會很複雜,但我一直無法找到任何合適的解決方案。我嘗試過加入,工會......但(顯然)我做錯了什麼。
我使用SQLAlchemy的0.6.6和Python 2.6(以防萬一它是有關)
預先感謝您!
我得到與解決方案怪異的行爲。我仍然可以獲得數據庫中所有「WhateverClass」的實例,但是如果我輸出whateverClassInstance.containerClassId,則它會爲所有這些實例指定「5」。但事實並非如此......只有少數的WhateverClass(es)有一個containerClassId == 5(比如300中的3個......我得到了300個實例,並且根據輸出,300有一個whateverClassInstance .containerClassId == 5 ...但這不是MySQL查詢瀏覽器所說的)。不過,謝謝你的幫助。 – BorrajaX 2011-02-13 19:04:47