SELECT * FROM Residents WHERE apartment_id IN (SELECT ID FROM Apartments WHERE postcode = 2000)
我正在使用 sqlalchemy 并尝试执行上述查询。我无法使用原始 SQL 来执行它,db.engine.execute(sql)因为它抱怨我的关系不存在…但我使用以下格式成功查询了我的数据库:session.Query(Residents).filter_by(???)。不过,我不知道如何用这种格式构建我想要的查询。
db.engine.execute(sql)
session.Query(Residents).filter_by(???)
在 SQLAlchemy 中,您可以使用 ORM(对象关系映射)的方式执行所需的查询。您需要在您的 SQLAlchemy 模型中建立表之间的关系,然后可以使用这些关系来构建查询。
假设您已经为 Residents 和 Apartments 表定义了适当的 SQLAlchemy 模型,并在模型中定义了适当的关系,您可以像这样构建查询:
Residents
Apartments
from sqlalchemy.orm import sessionmaker from your_module import Residents, Apartments, engine Session = sessionmaker(bind=engine) session = Session() # 假设通过 apartment_id 在 Residents 和 Apartments 之间建立了关系 query_result = session.query(Residents).\ join(Apartments, Residents.apartment_id == Apartments.ID).\ filter(Apartments.postcode == 2000).all() # 现在您可以遍历 query_result 来访问 Resident 对象 for resident in query_result: print(resident)
确保您已经在 SQLAlchemy 模型中正确定义了关系。例如,您的 Residents 模型可能如下所示:
from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship from your_module import Base class Residents(Base): __tablename__ = 'Residents' id = Column(Integer, primary_key=True) name = Column(String) apartment_id = Column(Integer, ForeignKey('Apartments.ID')) # 定义与 Apartments 表的关系 apartment = relationship("Apartments", back_populates="residents") def __repr__(self): return f"<Resident(id={self.id}, name={self.name})>"
类似地,您的 Apartments 模型可能如下所示:
from sqlalchemy import Column, Integer, String from sqlalchemy.orm import relationship from your_module import Base class Apartments(Base): __tablename__ = 'Apartments' ID = Column(Integer, primary_key=True) postcode = Column(Integer) residents = relationship("Residents", back_populates="apartment") def __repr__(self): return f"<Apartment(ID={self.ID}, postcode={self.postcode})>"
将 your_module 替换为您在其中定义了 SQLAlchemy 模型的适当模块,并确保您的模型已正确定义了适当的关系。然后,您应该能够成功执行查询。
your_module