文章内容
2021/5/1 18:57:08,作 者: 黄兵
SQLAlchemy Join查询示例
现在我们有了两个表,我们将看到如何在两个表上同时创建查询。为了在Customer和Invoice之间构造一个简单的隐式联接,我们可以使用query.filter()
将它们的相关列等同在一起。下面,我们使用此方法立即加载Customer 和 Invoice 实体:
from sqlalchemy.orm import sessionmaker Session = sessionmaker(bind = engine) session = Session() for c, i in session.query(Customer, Invoice).filter(Customer.id == Invoice.custid).all(): print ("ID: {} Name: {} Invoice No: {} Amount: {}".format(c.id,c.name, i.invno, i.amount))
下面是生成的sql语句:
SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email, invoices.id AS invoices_id, invoices.custid AS invoices_custid, invoices.invno AS invoices_invno, invoices.amount AS invoices_amount FROM customers, invoices WHERE customers.id = invoices.custid
查询结果:
ID: 2 Name: Gopal Krishna Invoice No: 10 Amount: 15000 ID: 2 Name: Gopal Krishna Invoice No: 14 Amount: 3850 ID: 3 Name: Govind Pant Invoice No: 3 Amount: 10000 ID: 3 Name: Govind Pant Invoice No: 4 Amount: 5000 ID: 4 Name: Govind Kala Invoice No: 7 Amount: 12000 ID: 4 Name: Govind Kala Invoice No: 8 Amount: 8500 ID: 5 Name: Abdul Rahman Invoice No: 9 Amount: 15000 ID: 5 Name: Abdul Rahman Invoice No: 11 Amount: 6000
下面使用query.join()
的方式查询符合条件结果:
session.query(Customer).join(Invoice).filter(Invoice.amount == 8500).all()
下面是生成的sql语句:
SELECT customers.id AS customers_id, customers.name AS customers_name, customers.address AS customers_address, customers.email AS customers_email FROM customers JOIN invoices ON customers.id = invoices.custid WHERE invoices.amount = ?
也可以使用outerjoin()
实现左外连接:
query.outerjoin(Customer.invoices)
评论列表