如何在Peewee中基于SELECT查询/CTE创建模型?
问题解答
当然可以,不用创建永久视图也能把目标SQL查询或其结果作为Model的数据源,具体可以通过两种方式实现:
一、直接用SQL查询作为Model数据源
多数ORM框架、数据建模工具都支持直接将原生SQL查询作为Model的数据源,无需提前创建视图:
- 比如用Python的SQLAlchemy时,可直接封装目标查询作为数据源:
from sqlalchemy import text, create_engine # 初始化数据库连接 engine = create_engine('你的数据库连接地址') # 定义目标聚合查询 flight_query = text("SELECT plane, count(flightId) as num from flights") # 执行查询并获取结果 query_result = engine.execute(flight_query) # 可将结果映射到临时Model类,或直接用于数据建模
- 要是用Tableau、Power BI这类BI工具,直接在数据源配置环节输入这条SQL查询,就能基于查询结果创建Model,全程不用碰永久视图。
二、用查询结果作为Model数据源
如果需要先拿到查询结果再建模,也有两种可行方案:
- 创建会话级临时表存储查询结果:临时表仅在当前数据库会话中存在,会话结束后自动销毁,不会产生永久对象。以PostgreSQL为例:
CREATE TEMP TABLE flight_stats AS SELECT plane, count(flightId) as num from flights;
之后就能把这个临时表作为Model的数据源。
- 在应用层直接获取结果集并转换:比如用Pandas把查询结果转成DataFrame,再将DataFrame作为Model的数据源,这种方式完全不需要在数据库层面创建任何对象。
内容的提问来源于stack exchange,提问作者Dennis Beier
相关产品推荐
相关产品推荐

