Python sqlalchemy:在列上调用STR_TO_DATE

Python sqlalchemy:在列上调用STR_TO_DATE,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我将我的一些代码从使用原始MySQL查询转移到sqlalchemy上 我现在遇到的问题是datetime是由C#工具以字符串格式保存的。不幸的是,该表示法与Python的表示法不匹配(以及它有一组额外的单引号),因此过滤有点麻烦 以下是保存日期的格式示例: '2016-07-01T17:27:01' 我可以使用以下MySQL命令将其转换为可用的datetime: STR_TO_DATE(T.PredicationGeneratedTime, \"'%%Y-%%m-%%dT%%H:%%i:%%

我将我的一些代码从使用原始MySQL查询转移到sqlalchemy上

我现在遇到的问题是datetime是由C#工具以字符串格式保存的。不幸的是,该表示法与Python的表示法不匹配(以及它有一组额外的单引号),因此过滤有点麻烦

以下是保存日期的格式示例:

'2016-07-01T17:27:01'
我可以使用以下MySQL命令将其转换为可用的datetime:

 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)
似乎没有办法指定转换的格式

注意:我意识到解决方案是修复日期时间的存储方式,但同时我希望对现有数据运行查询。

cast()
中,您应该使用
sqlalchemy.datetime
,而不是(我假设的是)一个
datetime.date
-这是异常的原因

然而,由于嵌入了单引号,修复这一问题并没有真正的帮助

幸运的是,表中存储的日期是ISO格式的。这意味着词典比较将在日期字符串本身上工作,而无需强制转换。只要将字符串用于
start
,并使用周围的单引号,它就可以工作

from datetime import datetime

start = "'{}'".format(datetime.now().isoformat())
session.query(Train.Model).filter(Train.Model.PredicationGeneratedTime < start)
从日期时间导入日期时间
start=“{}”.format(datetime.now().isoformat())
session.query(Train.Model).filter(Train.Model.predictionGeneratedTime
您可以尝试使用
func.str\u to\u date(列、格式\u字符串)
而不是
cast

from datetime import datetime

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