[英]One SQLAlchemy query from 3 tables and display result
我有 3 个数据库(如下),我必须编写一个 sqlalchemy 查询,该查询将在用户、订单项和产品上创建外部联接,从相应的表中返回 last_name、qty 和 name?
class OrderItem(Base): tablename = 'order'
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)
class Product(Base): tablename = 'product'
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.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)
这给了我结果:
Cleese 9 兔子 Cleese 2 兔子查普曼 2 兔子查普曼 3 鹦鹉查普曼 20 鹦鹉
我想用关系编写第二个查询,如下所示:
#query = session.query(用户、订单项、产品)
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)
您能帮我如何更改第二个查询以显示结果吗?
我为此更改了查询:
sq1 = session.query(User.last_name, OrderItem.qty, Product.name) \
.outerjoin(OrderItem, OrderItem.user_id == User.id) \
.outerjoin(Product, Product.id == User.id)
打印(sq1))
我得到了结果:
SELECT user.last_name AS user_last_name, "order".qty AS order_qty, product.name AS product_name
FROM user LEFT OUTER JOIN "order" ON "order".user_id = user.id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.