sqlalchemy.orm 连表查询
时间: 2023-10-31 16:05:59 浏览: 78
在 SQLAlchemy 中,可以使用 ORM 进行关系数据库的操作。当需要进行连表查询时,可以使用 SQLAlchemy 的 join() 方法来实现。
首先,需要导入必要的模块:
```python
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, join
from sqlalchemy.ext.declarative import declarative_base
```
其中,create_engine() 方法用于创建一个数据库引擎,sessionmaker() 方法用于创建一个数据库会话,declarative_base() 方法用于创建一个基类,该基类可以被所有的 ORM 类继承。
然后,需要定义 ORM 类:
```python
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
email = Column(String)
address = Column(String)
phone = Column(String)
class Order(Base):
__tablename__ = 'orders'
id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('users.id'))
product = Column(String)
quantity = Column(Integer)
price = Column(Float)
```
最后,可以通过 join() 方法来实现连表查询:
```python
engine = create_engine('mysql+pymysql://user:password@host/dbname?charset=utf8')
Session = sessionmaker(bind=engine)
session = Session()
result = session.query(User, Order).filter(User.id == Order.user_id).all()
for user, order in result:
print(user.name, order.product)
```
以上代码会输出每个用户的姓名和他们对应的订单商品名称。
在连表查询时,需要通过 filter() 方法来指定关联条件,这里使用了 User.id 和 Order.user_id 进行关联。在查询结果中,每个元组包含了 User 和 Order 类的实例。
阅读全文