You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sqlalchemy结合SQLite使用CTE列天数调用DATE函数生成日期问题

问题根因

你代码中用Python f字符串拼接f'+{ints.c.num} days'的逻辑是在Python构造SQL表达式阶段执行的,此时ints.c.num只是SQLAlchemy的列对象,转字符串后为anon_1.num,最终传给数据库的是固定字符串'+anon_1.num days',而非每行动态拼接num值的间隔参数,DATE函数无法解析非法间隔参数,因此返回None。

解决方法

你需要将字符串拼接逻辑放到SQL侧执行,让数据库查询时动态将每行的num值拼入间隔字符串,修改后的代码如下:

from sqlalchemy import func, literal, union_all, select

with Session(DB) as session:
    ints = union_all(
        select(literal(1).label('num')),
        select(2),
        select(3),
        select(4),
        select(5),
        select(6),
        select(7),
        select(8),
        select(9),
        select(10),
    ).cte()

    calendar = session.execute(
        select(
            ints.c.num,
            # 使用SQL原生的concat函数实现动态拼接间隔参数
            func.DATE(func.current_date(), func.concat('+', ints.c.num, ' days'))
        ).select_from(ints)
    )

    for row in calendar:
        print(row)

验证说明

修改后生成的SQL会对应调整为动态拼接逻辑,数据库执行时会将每行的num值实际代入间隔计算,即可正常返回对应日期。

内容的提问来源于stack exchange,提问作者Ed Danileyko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:54:04