相关疑难解决方法(0)

在执行查询之前,在SQLAlchemy模型中将datetime转换为unix时间戳?

我使用SQLAlchemy来处理使用奇怪时间戳格式的远程数据库 - 它将时间戳存储为自纪元以来的双精度毫秒.我想使用python datetime对象,所以我在我的模型中编写了getter/setter方法,遵循以下要点:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import synonym
from sqlalchemy.dialects.mysql import DOUBLE
import datetime

Base = declarative_base()
class Table(Base):
    __tablename__ = "table"

    id = Column(Integer, primary_key=True)
    _timestamp = Column("timestamp", DOUBLE(asdecimal=False))

    @property
    def timestamp(self):
        return datetime.datetime.utcfromtimestamp(float(self._timestamp)/1000.)

    @timestamp.setter
    def timestamp(self, dt):
        self._timestamp = float(dt.strftime("%s"))*1000.

    timestamp = synonym('_timestamp', descriptor=timestamp)
Run Code Online (Sandbox Code Playgroud)

这非常适合在表中插入新行并使用表中的对象:

>>> table = session.query(Table).first()
<Table id=1>
>>> table.timestamp
datetime.datetime(2016, 6, 27, 16, 9, 3, 320000)
>>> table._timestamp
1467043743320.0
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在过滤器表达式中使用datetime时,它会崩溃:

>>> july = datetime.datetime(2016, 7, 1)
>>> old …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

6
推荐指数
1
解决办法
4993
查看次数

使用带有mysql unix时间戳的sqlalchemy定义表

背景,有几种方法可以在MySQ中存储日期.

  1. 作为字符串,例如"09/09/2009".
  2. 作为使用函数UNIX_TIMESTAMP()的整数,这应该是传统的unix时间表示(你知道自纪元加上/减去闰秒后的秒数).
  3. 作为MySQL TIMESTAMP,mysql特定的数据类型与unix时间戳不同.
  4. 作为MySQL Date字段,另一种mysql特定的数据类型.

    不要将案例2与案例3(或案例4)混淆是非常重要的.我有一个带有整数日期字段的现有表(案例2)如何在sqlalchemy中以一种我不必访问mysql的"FROM_UNIXTIME"函数的方式定义它?

    对于记录,只使用sqlalchemy.types.DateTime并希望它在检测到整数列时做正确的事情不起作用,它适用于时间戳字段和日期字段.

python mysql sqlalchemy

3
推荐指数
1
解决办法
3876
查看次数

标签 统计

python ×2

sqlalchemy ×2

mysql ×1