我尝试使用Alembic更改PostgreSQL中的一个表列,但我不知道如何执行所需的更新以应用SQLAlchemy的 server_onupdate 属性。
该列为:
changed = Column(ArrowType(timezone=True), server_default=utcnow(), primary_key=True)
我使用的是SQLAlchemy_utils包中的Arrowtype列类型(这不是问题)。
我的意图是创建这样的内容:
changed = Column(ArrowType(timezone=True), **server_onupdate=utcnow()**, primary_key=True)
但使用Alembic函数:更改列
在文档中,只有对 server_default 属性的引用,而没有关于 server_onupdate 的任何内容
有没有办法做到这一点?
谢谢
1条答案
按热度按时间j7dteeu81#
不幸的是,Alembic没有提供在
alter_column
中修改server_onupdate
的逻辑(参见代码),但是它提供了修改server_default
的逻辑。文档中有以下设置MySQLON UPDATE
的技巧:如果你改变列的定义,这是可以实现的,但是,如果它看起来太像黑客了,那么总是可以用Alembic写一个直接的SQL指令。
更新:
我刚刚注意到postgresql标记.. postgresql中的列没有
ON UPDATE
(仅用于外键),因此设置server_onupdate
将不起任何作用。要获得相同的逻辑,您需要创建一个数据库端触发器或使用ORM端onupdate
或事件。