我正在将一些代码从使用原始MySQL查询移到sqlalchemy上。
我现在遇到的问题是,日期时间是由一个C#工具以字符串格式保存的。不幸的是,该表示与Python的不匹配(以及它有一组额外的单引号),因此过滤有些麻烦。
下面是保存日期的格式示例:

'2016-07-01T17:27:01'

我可以使用以下MySQL命令将其转换为可用的日期时间:
 STR_TO_DATE(T.PredicationGeneratedTime, \"'%%Y-%%m-%%dT%%H:%%i:%%s'\")

但是,我找不到任何描述如何在使用sqlalchemy进行筛选时调用STR_to_DATE等内置函数的文档
以下Python代码:
 session.query(Train.Model).filter(cast(Train.Model.PredicationGeneratedTime, date) < start)

给我的是:
 TypeError: Required argument 'year' (pos 1) not found

似乎没有办法指定转换的格式。
注意:我意识到解决方案是修复日期时间被存储的方式,但同时我想对现有的数据运行查询。

最佳答案

cast()中,您应该使用sqlalchemy.DateTime,而不是(我假设是)adatetime.date——这是异常的原因。
但是,由于嵌入的单引号,这并没有真正的帮助。
幸运的是,表中存储的日期是ISO格式的。这意味着字典比较将对日期串本身进行工作,而不进行转换。只要您使用start的字符串和周围的单引号,它就可以工作。

from datetime import datetime

start = "'{}'".format(datetime.now().isoformat())
session.query(Train.Model).filter(Train.Model.PredicationGeneratedTime < start)

关于python - sqlalchemy:在列上调用STR_TO_DATE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38276487/

10-12 23:07