python - 在 Sqlalchemy 中,将字符串转换为日期时间戳

  显示原文与译文双语对照的内容

我有一个数据库表,我通过 Sqlalchemy 访问它。 每一行都被重写,但不幸的是,它不是带有日期类型的列。

上面有两个柱子。 一个是日期 ,一个字符串 ( 不采用ISO格式"yyyy-MM-dd"格式,但在英联邦"DD/MM/YYYY" 格式中。),另一个是时间,作为字符串。

我可以将数据转换为 python 并将它的转换为带有 strptimedatetime.datetime,但是我想过滤SQL中的行。

如何编写SQL以执行与 python的strptime相等的操作? - 比如 接受字符串的连接部分并将它的解释为日期? ( 我可以图 date-> 字符串,但不是 string-> 日期。)

我如何说服 Sqlalchemy 生成 SQL?

时间: 作者:

在SQLite上,你需要转换文本。 以下可能有所帮助:


qry = session.query(SomeTable)
dt_column =(func.substr(SomeTable.date, 7) +"-" +
 func.substr(SomeTable.date, 4, 2) +"-" +
 func.substr(SomeTable.date, 1, 2) +"" + SomeTable.time)
dt_column = func.datetime(dt_column)
qry = qry.filter(dt_column <= datetime(2013, 1, 1, 23, 59, 59))

更好的方法是使用 sqlalchemy混合属性,这样你就可以在 python 级别和数据库上获取datetime字段:


class SomeTable(Base):
 __tablename__ = 'some_table'
 id = Column(Integer, primary_key=True)
 name = Column(String)
 date = Column(String)
 time = Column(String)

 @hybrid_property
 def datetime(self):
 # @todo: add python parsing of date and time to produce the result
 str_value = self.date + self.time
 return datetime.strptime(str_value,"%d/%m/%Y%H:%M:%S")

 @datetime.expression
 def datetime(cls):
 # @note: query specific value
 dt_column =(func.substr(cls.date, 7) +"-" +
 func.substr(cls.date, 4, 2) +"-" +
 func.substr(cls.date, 1, 2) +"" + cls.time)
 dt_column = func.datetime(dt_column)
 return dt_column

...
qry = session.query(SomeTable)
qry = qry.filter(SomeTable.datetime <= datetime(2013, 1, 1, 23, 59, 59))

注意,在客户端,你将拥有实例,而在sqlite级别上,它仍然是一个字符串。

作者:
...