0

我在 sqlAlchemy 中有这段代码:

result = session.query(FXHoliday).where(
           and_(
              FXHoliday.country_region_code == country, 
              func.DATE(FXHoliday.event_date) == when.date()
           )
         ).all()

现在这个函数像魅力一样工作,但在 sqlserver :( ...

上面的函数翻译成

 SELECT [FX_HOLIDAY].countryorregion AS [FX_HOLIDAY_countryorregion],      
        [FX_HOLIDAY].holidayname AS [FX_HOLIDAY_holidayname], 
        [FX_HOLIDAY].normalizeholidayname AS [FX_HOLIDAY_normalizeholidayname], 
        [FX_HOLIDAY].ispaidtimeoff AS [FX_HOLIDAY_ispaidtimeoff], 
        [FX_HOLIDAY].countryregioncode AS [FX_HOLIDAY_countryregioncode],       
        [FX_HOLIDAY].date AS [FX_HOLIDAY_date]

 FROM [FX_HOLIDAY]

 WHERE [FX_HOLIDAY].countryregioncode = ? 
       AND 
       DATE([FX_HOLIDAY].date) = ?

这是正确的,但是 sqlserver 中没有 DATE()。我可以解决制作日期列 varchar 的问题,以便我可以使用:

  FXHoliday.event_date == when.strftime("%Y-%m-%d")

但这确实是一个丑陋的解决方案。我想知道是否一些开发人员找到了更好、更优雅的解决方案....

4

1 回答 1

0

我相信您正在尝试确保将datetime对象(我假设when是)解释为date.

为此有一个 sqlalchemy 函数:

from sqlalchemy import func

result = session.query(FXHoliday).where(
           and_(
              FXHoliday.country_region_code == country, 
              FXHoliday.event_date == func.date(when)
           )
         ).all()

虽然您在第一部分使用 func.DATE,但两者都使用它。

更新:我认为您正在尝试将预先存在的 DATE 列转换为 DATE,但您真正想要转换的是 pythonic 对象。

于 2021-07-15T16:01:46.947 回答