我想实现类似这样的语句:SELECT * FROM `User` JOIN Address ON `User`.id = Address.user_id WHERE Address.`name` = 'hello';
时间: 2023-07-13 16:30:47 浏览: 116
按照名字找地址
你可以使用 SQLAlchemy 的查询构建器来实现上述 SQL 语句。首先,你需要定义好 `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)
name = Column(String)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship('User', back_populates='address')
```
然后,你可以使用 SQLAlchemy 的查询构建器来构建查询语句,示例代码如下:
```python
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, and_
engine = create_engine('sqlite:///example.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
# 使用 join 进行关联查询,并添加 where 条件
users = session.query(User).join(Address, User.id == Address.user_id).filter(Address.name == 'hello').all()
# 打印查询结果
for user in users:
print(user.name, user.address.name)
```
上述代码中,我们使用 `join()` 方法来进行关联查询,通过 `filter()` 方法添加了 where 条件,最后使用 `all()` 方法获取查询结果。在 where 条件中,我们使用了 `and_()` 函数来组合多个条件,这里只有一个条件,即 `Address.name == 'hello'`。
阅读全文