【问题标题】:How to insert a value into SQLAlchemy TIMESTAMP column如何将值插入 SQLAlchemy TIMESTAMP 列
【发布时间】:2019-08-23 17:55:30
【问题描述】:

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

column "timestamp" is of type timestamp without time zone but expression is of type numeric

我的表格如下所示:

class SomeTable(db.Model):
    timestamp = Column(TIMESTAMP)

插入尝试如下所示:

SomeTable(timestamp=time.time())

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

2019-04-02 11:44:24.801046

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

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

【问题讨论】:

    标签: python python-3.x postgresql sqlalchemy timestamp


    【解决方案1】:

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

    Column('timestamp', TIMESTAMP(timezone=False), nullable=False, default=datetime.now())
    

    所以默认情况下你有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 变量更好。最好使用数据库服务器的时间。
    • 我认为拥有default=datetime.now() 将导致您的所有条目具有相同的时间戳,因为只有在加载应用程序时才会计算全局datetime.now()。您可能需要datetime.now。或者按照 Charles 的建议使用 db 函数。
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 2023-02-14
    • 2017-11-15
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    相关资源
    最近更新 更多