如何将值插入 SQLAlchemy TIMESTAMP 列

mas*_*lak 5 python postgresql timestamp sqlalchemy python-3.x

我正在尝试使用 SQLAlchemy 设置时间戳列的值,但遇到以下错误:

column "timestamp" is of type timestamp without time zone but expression is of type numeric
Run Code Online (Sandbox Code Playgroud)

我的表如下所示:

class SomeTable(db.Model):
    timestamp = Column(TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)

插入尝试如下所示:

SomeTable(timestamp=time.time())
Run Code Online (Sandbox Code Playgroud)

当我使用 datetime.now() 而不是 time.time() 时,记录将插入到表中,但是当我从数据库中选择它时,它具有以下格式:

2019-04-02 11:44:24.801046
Run Code Online (Sandbox Code Playgroud)

所以看起来 TIMESTAMP 字段不存储时间戳格式。

这是常规的 postgres 行为吗?或者我错过了什么?

Mil*_*vic 4

我认为这很好,因为下一个是正确的:

Column('timestamp', TIMESTAMP(timezone=False), nullable=False, default=datetime.now())
Run Code Online (Sandbox Code Playgroud)

所以默认情况下你有datetime.now()那里,它是关于演示的

datetime.now()会给你'2019-04-02 14:21:33.715782

datetime.now().isoformat()会给你'2019-04-02T14:31:09.071147'

检查一下:http://www.sqlfiddle.com/#!15/d0c6a/ 8

如果您取消注释第三个插入,您将得到与您的完全相同的异常

  • 更好的是使用 sqlalchmey.func.now 变量。最好利用数据库服务器的时间。 (3认同)