sqlachemy关联输出3个表的信息
时间: 2024-02-11 18:05:05 浏览: 59
sql多表关联查询,三表关联查询
5星 · 资源好评率100%
假设有三个表:`users`、`orders`和`items`,它们分别存储用户、订单和商品的信息,并且每个订单属于一个用户,每个商品属于一个订单。
首先,需要在这三个表中定义相应的模型类,并且在 `orders` 和 `items` 中定义外键以引用 `users` 和 `orders`。
```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)
orders = relationship("Order")
class Order(Base):
__tablename__ = 'orders'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
items = relationship("Item")
class Item(Base):
__tablename__ = 'items'
id = Column(Integer, primary_key=True)
order_id = Column(Integer, ForeignKey('orders.id'))
name = Column(String)
price = Column(Integer)
```
然后,可以使用 SQLAlchemy 中的查询语句来获取这三个表的信息,并将它们关联起来。
```python
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
# 查询所有用户及其订单和商品信息
users = session.query(User).options(
relationship(User.orders, innerjoin=True)
).options(
relationship(Order.items, innerjoin=True)
).all()
# 输出结果
for user in users:
print("User:", user.name)
for order in user.orders:
print("Order:", order.id)
for item in order.items:
print("Item:", item.name, item.price)
```
这样就可以输出所有用户、订单和商品的信息了。在查询语句中,使用 `relationship()` 方法来指定表之间的关系,并使用 `options()` 方法来设置连接选项,以避免产生不必要的连接。
阅读全文