在sqlalchemy中设置server_default失败

kur*_*tgn 5 python postgresql sqlalchemy

这是我希望SQLAlchemy要做的事情:

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

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

这就是SQLAlchemy代码中的样子:

reg_at = db.Column(db.DateTime, server_default="(now() at time zone 'utc')")
Run Code Online (Sandbox Code Playgroud)

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

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')'" {}
Run Code Online (Sandbox Code Playgroud)

因此,我认为单引号/双引号存在问题。

我试过了

"(now() at time zone \'utc\')"
Run Code Online (Sandbox Code Playgroud)

但这会给我同样的错误。

然后,我换了引号:

'(now() at time zone "utc")'
'(now() at time zone \"utc\")'
Run Code Online (Sandbox Code Playgroud)

无济于事:

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")\''
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

arc*_*nic 6

考虑使用textsqlalchemy的功能:

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