在sqlalchemy中,我有一个User表,有一个Address表,现在我想使用joinedload从User表join Address表,但是想用Address表的条件,怎么做
时间: 2024-03-05 17:53:56 浏览: 17
在 SQLAlchemy 中,你可以使用 `joinedload()` 方法来进行关联查询,同时也可以通过 `with_parent()` 方法来指定关联的条件。
假设你的 `User` 和 `Address` 表的模型类如下:
```python
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
address_id = Column(Integer, ForeignKey('addresses.id'))
address = relationship('Address', back_populates='users')
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
street = Column(String)
city = Column(String)
state = Column(String)
zip = Column(String)
users = relationship('User', back_populates='address')
```
如果你想根据 `Address` 表的条件来进行关联查询,可以使用 `with_parent()` 方法来指定:
```python
from sqlalchemy.orm import sessionmaker, joinedload
Session = sessionmaker(bind=engine)
session = Session()
# 使用 joinedload 进行关联查询,并使用 with_parent 指定 Address 表的条件
users = session.query(User).options(joinedload(User.address).with_parent(Address, street='123 Main St')).all()
# 打印查询结果
for user in users:
print(user.name, user.address.city, user.address.state)
```
上述代码中,我们使用 `options()` 方法来指定关联查询的选项,同时使用 `with_parent()` 方法来指定关联查询的条件,这里我们指定了 `Address` 表中 `street` 字段等于 `'123 Main St'` 的记录作为关联查询的条件。