Python sqlalchemy:在列上调用STR_TO_DATE
我将我的一些代码从使用原始MySQL查询转移到sqlalchemy上 我现在遇到的问题是datetime是由C#工具以字符串格式保存的。不幸的是,该表示法与Python的表示法不匹配(以及它有一组额外的单引号),因此过滤有点麻烦 以下是保存日期的格式示例: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:%%
'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)