sqlalchemy多表联合查询
时间: 2023-09-28 16:09:36 浏览: 53
在 sqlalchemy 中,可以使用 join() 方法来进行多表联合查询。下面是一个简单的例子:
假设我们有两个表:user 和 order,分别存储用户信息和订单信息。这两个表之间有一个外键 user_id,表示订单属于哪个用户。
首先,我们需要定义两个对应的模型类:
```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__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String)
orders = relationship('Order', backref='user')
class Order(Base):
__tablename__ = 'order'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('user.id'))
product = Column(String)
price = Column(Integer)
```
接下来,我们可以使用 join() 方法来查询某个用户的所有订单:
```python
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
user_id = 1
orders = session.query(Order).join(User).filter(User.id == user_id).all()
for order in orders:
print(order.product, order.price)
```
在上面的代码中,我们使用 join() 方法将 Order 表和 User 表联合查询,并使用 filter() 方法来限制查询结果只包含指定用户的订单。
需要注意的是,如果要查询多个表之间的关系,可能需要使用多次 join() 方法来构建查询语句。具体使用方法可以参考官方文档中的示例:https://docs.sqlalchemy.org/en/14/orm/query.html#joining-multiple-entities