繁体   English   中英

来自 3 个表的一个 SQLAlchemy 查询并显示结果

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM