我想實現一個選擇與嵌套select子句,找到父母沒有任何孩子。是我的表(從根本上簡化)如下:sqlalchemy in_ subquery
class Person(Base):
__tablename__ = "person"
id = Column(Integer, primary_key=True)
name = Column(String, nullable=True, default=None)
class ChildTable(Base):
__tablename__ = "foo"
id = Column(Integer, primary_key=True)
data = Column(String)
person_id = Column(Integer, ForeignKey("person.id"), nullable=True)
在SQL我的查詢將
select id from person where id not in (select person_id from foo);
如何在Python和SQLAlchemy的實現呢?我發現這sqlalchemy, select using reverse-inclusive (not in) list of child column values,但它依賴於聲明的關係。我不使用關係,因爲我遇到了很多問題,其他線程大多數會過期或更改由其他線程緩存的數據,以及foo.person_id可以爲null並且不引用任何內容。
我該怎麼做?我嘗試了in_和任何運算符的組合,引發了不同的異常。例如,這種嘗試:
empty_persons = config.Session.query(Person).filter(Person.id.notin_(ChildTable.\
person_id)).all()
失敗:in_()接受一個表達式列表或一個可選項。
這可能是一件簡單的事情,但我只是不明白應該如何做。
ř
難道你不能只在這兒加入ChildTable的Person嗎? – reptilicus
我不確定。問題是,在這種情況下,它是一個完全有效且可接受的情況,即在ChildTable中存在條目而不與Person鏈接(nullable = True)。我暫時用兩個單獨的查詢解決了這個問題,但我覺得這不是正確的做法。 –