【问题标题】:setting server_default in sqlalchemy fails在 sqlalchemy 中设置 server_default 失败
【发布时间】:2015-10-15 04:29:39
【问题描述】:

这是我希望 SQLAlchemy 做的事情:

blesk_dev=# alter table address add column reg_at timestamp without time zone default (now() at time zone 'utc');
ALTER TABLE

也就是说,我想为一列设置默认的 UTC 时间。在纯 psql 中,如上所示,这成功了。

这就是它在 SQLAlchemy 代码中的样子:

reg_at = db.Column(db.DateTime, server_default="(now() at time zone 'utc')")

但是当我尝试迁移时,我得到了这个:

sqlalchemy.exc.ProgrammingError: (ProgrammingError) syntax error at or near "utc"
LINE 1: ...STAMP WITHOUT TIME ZONE DEFAULT '(now() at time zone 'utc')'
                                                                 ^
 "ALTER TABLE address ADD COLUMN reg_at TIMESTAMP WITHOUT TIME ZONE DEFAULT '(now() at time zone 'utc')'" {}

所以我认为单引号/双引号存在问题。

我试过了

"(now() at time zone \'utc\')"

但这给了我同样的错误。

然后我交换了引号:

'(now() at time zone "utc")'
'(now() at time zone \"utc\")'

无济于事:

sqlalchemy.exc.DataError: (DataError) invalid input syntax for type timestamp: "(now() at time zone "utc")"
 'ALTER TABLE address ADD COLUMN reg_at TIMESTAMP WITHOUT TIME ZONE DEFAULT \'(now() at time zone "utc")\''

我该如何解决这个问题?

【问题讨论】:

    标签: python postgresql sqlalchemy


    【解决方案1】:

    考虑使用sqlalchemy的text函数:

    from sqlalchemy import text
    reg_at = db.Column(db.DateTime, server_default=text('(now() at time zone "utc")'))
    

    【讨论】:

      猜你喜欢
      • 2022-08-24
      • 2019-02-25
      • 1970-01-01
      • 2016-10-08
      • 2021-03-20
      • 2016-07-10
      • 2022-08-14
      • 2018-03-06
      • 1970-01-01
      相关资源
      最近更新 更多