1
限制我有2類:contains_eager和SQLAlchemy的
class A(Base):
id = Column(Integer, primary_key=True)
name = Column(String)
children = relationship('B')
class B(Base):
id = Column(Integer, primary_key=True)
id_a = Column(Integer, ForeignKey('a.id'))
name = Column(String)
現在我需要所有的對象A中含有B與一些名稱和對象將包含過濾所有的B對象。
爲了實現它,我構建了查詢。
query = db.session.query(A).join(B).options(db.contains_eager(A.children)).filter(B.name=='SOME_TEXT')
現在我只需要50項查詢的,所以我做的:
query.limit(50).all()
結果包含小於50即使沒有限制有超過50家。我讀預先加載的禪。但是必須有一些技巧來實現它。我的想法之一是做2查詢。一個帶有innerjoin的ID可以在第一個查詢中使用這個ID。
但也許有更好的解決方案。
出於好奇,會使用EXISTS(可能規劃爲半連接),例如遭受什麼DB後端。 –
@IljaEverilä它是那些嚴重依賴多種因素的事情之一,比如數據庫引擎,版本和查詢,所以很難直接給出答案。 *在一般意義上*,連接通常*比子查詢更高效。一如既往,個人資料可以搞清楚。 – univerio
這就是事情,因爲EXISTS可以並且作爲半連接實現,至少在某些dbs中是這樣。當然這可能不適用於所有查詢,但通常發生在這種簡單的情況下。但最後我想你是對的錢:個人資料,看看。 –