我使用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) 背景,有几种方法可以在MySQ中存储日期.
作为MySQL Date字段,另一种mysql特定的数据类型.
不要将案例2与案例3(或案例4)混淆是非常重要的.我有一个带有整数日期字段的现有表(案例2)如何在sqlalchemy中以一种我不必访问mysql的"FROM_UNIXTIME"函数的方式定义它?
对于记录,只使用sqlalchemy.types.DateTime并希望它在检测到整数列时做正确的事情不起作用,它适用于时间戳字段和日期字段.