在SQLAlchemy中将字符串转换为日期时间戳

2024-03-28 14:49:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库表,我正在通过SQLAlchemy访问它。每一行都有时间戳,但不幸的是,它不仅仅是一个日期类型的列。

它有两列的时间戳。一个是日期作为字符串(不是ISO格式的“YYYY-MM-DD”格式,而是英联邦的“DD/MM/YYYY”格式)另一个是时间作为字符串

我可以将数据转换到Python中,并用strptime将其转换为datetime.datetime,但是我想过滤SQL中的行。

我如何编写SQL来完成与Python的strtime相当的工作?-例如,获取字符串的连接部分并将其解释为日期?(我可以计算date->string,但不能计算字符串->;日期。)

如何说服SQLAlchemy生成该SQL?


Tags: 数据字符串数据库类型sqldatetimesqlalchemy格式
1条回答
网友
1楼 · 发布于 2024-03-28 14:49:34

在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))

更好的方法是使用sqlalchemyHybrid Attributes,这样您就可以在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))

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

相关问题 更多 >