【问题标题】:SQLAlchemy: can't compare date attribute with datetime.date objectSQLAlchemy:无法将日期属性与 datetime.date 对象进行比较
【发布时间】:2021-10-13 11:16:25
【问题描述】:

在我的数据库 (MariaDB) 中,我有一列数据类型为 VARCHAR。数据实际上代表日期文本。因此,在访问它时,我使用了 @property 装饰器将文本转换为 Python datetime.date 对象:

@property
def data(self):
   locale.setlocale(locale.LC_ALL, 'pt_BR.utf8')
   try:
       return datetime.strptime(self.doc_coletor, '%d/%B/%Y')
   except ValueError:
       return None

结果如下:

Original (string) Parsed (datetime object)
09/agosto/2021 2021-08-09 00:00:00
08/agosto/2021 2021-08-08 00:00:00
07/agosto/2021 2021-08-07 00:00:00

但是,当尝试通过 SQLAlchemy 执行过滤器时,查询不返回任何结果,即使它们在实践中存在:

self.cpj.query(Coletor).filter(
            Coletor.data == datetime.datetime(2021-08-06 00:00:00)
        ).all()

预期输出: [<Coletor object at 0x00000199E7255190>, <Coletor object at 0x00000199E7255191>, <Coletor object at 0x00000199E7255192>, ...] 实际输出: []

我做错了什么?

【问题讨论】:

  • 你可能想创建一个hybrid attribute。
  • 就是这样,@snakecharmerb!谢谢!

标签: python sql date datetime sqlalchemy


【解决方案1】:

我能够解决这个问题!

显然,无法在正在运行的程序级别使用 SQLAlchemy 创建的属性来查询数据库。因此,有必要调用第二个比较操作,以评估属性 (@property) 转换后的日期值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2014-02-12
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多