【发布时间】:2021-10-03 23:41:10
【问题描述】:
我有 3 个数据库(如下),我必须编写一个 sqlalchemy 查询,该查询将在用户、订单项和产品上创建一个外连接,从相应的表中返回 last_name、数量和名称?
类 OrderItem(Base): 表名 = '订单'
id = sa.Column('id', sa.Integer, primary_key=True)
product_id = sa.Column('product_id', sa.Integer, sa.ForeignKey('product.id'))
user_id = sa.Column('user_id', sa.Integer, sa.ForeignKey('user.id'))
qty = sa.Column('qty', sa.Integer)
类产品(基础): 表名 = '产品'
id = sa.Column('id', sa.Integer, primary_key=True)
name = sa.Column('name', sa.Text)
price = sa.Column('price', sa.Numeric(14,2))
类用户(基础): 表名 = '用户'
id = sa.Column('id', sa.Integer, primary_key=True)
first_name = sa.Column('first_name', sa.Text)
last_name = sa.Column('last_name', sa.Text)
Base.metadata.create_all(engine)
engine.echo = True
session.add(User(id=42, first_name='John', last_name='Cleese'))
session.ad
d(User(id=43, first_name='Eric', last_name='Idle'))
session.add(User(id=44, first_name='Terry', last_name='Jones'))
session.add(User(id=13, first_name='Graham', last_name='Chapman'))
session.add(Product(id=1, price=Decimal('2.10'), name='Rabbit'))
session.add(Product(id=2, price=Decimal('5.10'), name='Parrot'))
session.add(OrderItem(product_id=1, user_id=42, qty=9))
session.add(OrderItem(product_id=1, user_id=42, qty=2))
session.add(OrderItem(product_id=1, user_id=13, qty=2))
session.add(OrderItem(product_id=2, user_id=13, qty=3))
session.add(Ord
erItem(product_id=2, user_id=13, qty=20))
session.commit()
我只写了一个查询
一个查询
for user, order, product in session.query(User, OrderItem, Product). \
select_from(User).outerjoin(OrderItem).join(Product).all():
print(user.last_name, order.qty, product.name)
这给了我结果:
克莱斯 9 兔 克莱斯 2 兔 查普曼 2 兔 查普曼 3 鹦鹉 查普曼 20 鹦鹉
我想用关系编写第二个查询,如下所示:
第二个查询
#query = session.query(User, OrderItem, Product)
query = session.query(User.last_name, OrderItem.qty, Product.name) \
.outerjoin(User, OrderItem, OrderItem.user_id == User.id) \
.outerjoin(Product, User, Product.id == User.id)
您能帮我如何更改第二个查询以显示结果吗?
【问题讨论】:
标签: python sqlalchemy