python sqlalchemy 子查询取交集
时间: 2023-10-13 19:23:55 浏览: 201
在 SQLAlchemy 中,可以使用 `subquery()` 函数来表示子查询。要取子查询之间的交集,可以使用 `intersect()` 方法。下面是一个示例代码:
```python
from sqlalchemy import create_engine, Table, Column, Integer, String, select, and_
# 创建数据库引擎和表格
engine = create_engine('sqlite:///test.db')
metadata = MetaData()
table1 = Table('table1', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
table2 = Table('table2', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer))
# 构造子查询
subq1 = select([table1.c.id]).where(and_(table1.c.age >= 18, table1.c.age <= 30))
subq2 = select([table2.c.id]).where(and_(table2.c.age >= 20, table2.c.age <= 25))
# 构造主查询
query = select([table1, table2]).where(and_(table1.c.id == table2.c.id,
table1.c.id.in_(subq1.intersect(subq2))))
# 执行查询
with engine.connect() as conn:
result = conn.execute(query)
for row in result:
print(row)
```
这个示例代码使用 SQLite 数据库,创建了两个表格 `table1` 和 `table2`,每个表格包含 `id`、`name` 和 `age` 三个字段。然后构造了两个子查询,分别选择了 `age` 在一定范围内的记录,最后使用交集操作取得两个子查询之间的交集,并在主查询中使用 `in_()` 方法将结果限制在这个交集中的 `id` 上。最终输出了符合条件的记录。
阅读全文