python - 如何将 Teradata QUALIFY 关键字添加到 SQLAlchemy 核心语句的末尾?
问题描述
我正在尝试将一些原始 Teradata SQL 重写为 SQLAlchemy Core,并且遇到了QUALIFY
关键字的障碍。例如,给定以下代码:
SELECT itemid, sumprice, RANK() OVER (ORDER BY sumprice DESC)
FROM (SELECT a1.itemid, SUM(a1.sale) AS sumprice
FROM sales AS a1
GROUP BY a1.itemid) as t1
QUALIFY RANK() OVER (ORDER BY sumprice DESC) <= 100;
我可以将大部分内容重写如下:
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.sql import select, func
engine = create_engine('teradatasql://user:password@server/logmech=LDAP&encrpytdata=true')
metadata = MetaData(bind=engine)
a1 = Table('sales', metadata, autoload=True, autoload_with=engine).alias('a1')
t1 = select([a1.c.itemid, func.sum(a1.c.sale).label('sumprice')]).group_by(a1.c.itemid).subquery()
sql = select([t1.c.itemid, t1.c.sumprice, func.rank().over(order_by=t1.c.sumprice.desc())])
sql = sql.select_from(t1)
如果我要打印此代码以stdout
喜欢这样,例如:
print(sql.compile(engine, compile_kwargs={'literal_binds': True}))
除了最后一行之外,它会给我上面的确切查询。我怎么把那条QUALIFY
线弄进去?
解决方案
推荐阅读
- html - 如何在Angular应用程序中允许基本的自定义样式避免innerHTML
- php - HTML FORM 重定向一个输入值,并处理其他输入值
- android - 是否可以知道用户是否选择在 Android 上取消日历事件插入?
- .net - Entity Framework 6.3 as a Service 和 .Net Core 3
- c# - 当控制器方法具有异步后缀时,AspNetCore 3.0(从 2.2 升级)路由似乎中断
- excel - 在 C 中插入包含信息的新行 复制其他数据
- microcontroller - 如何在 ATtiny84 上的快速 PWM 模式下输出与 OC1B 的比较匹配?
- ssms - 如何启动 Microsoft SQL 服务器管理并选择服务器
- c++ - rdbuf()->pubsetbuf() 使用双向 fstream 仅适用于写入
- python - Django models.py 中的文件操作