【问题标题】:One SQLAlchemy query from 3 tables and display result来自 3 个表的一次 SQLAlchemy 查询并显示结果
【发布时间】: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


    【解决方案1】:

    我为此更改了查询:

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-16
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      相关资源
      最近更新 更多