Ele*_*tro 5 python postgresql sqlalchemy alembic
我正在尝试使用Alembic更改PostgreSQL中的表列,但是我不知道如何执行所需的更新以应用SQLAlchemy的server_onupdate属性。
该列是:
changed = Column(ArrowType(timezone=True), server_default=utcnow(), primary_key=True)
Run Code Online (Sandbox Code Playgroud)
我正在使用SQLAlchemy_utils包中的Arrowtype列类型(这不是问题)。
我的意图是创建这样的东西:
changed = Column(ArrowType(timezone=True), **server_onupdate=utcnow()**, primary_key=True)
Run Code Online (Sandbox Code Playgroud)
但是使用Alembic函数:alter_column
在文档中,仅引用server_default属性,而没有关于server_onupdate的引用
有没有办法做到这一点?
谢谢
不幸的是,Alembic 不提供在代码中进行更改的逻辑,server_onupdate但它提供了更改的逻辑。文档中有以下设置 MySQL 的技巧:alter_columnserver_defaultON UPDATE
server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
Run Code Online (Sandbox Code Playgroud)
因此,如果您更改列定义,则可以实现。但是,如果它看起来太 hack 了,那么总是可以在 Alembic 中编写直接 SQL 指令。
op.execute('ALTER TABLE mytable ALTER COLUMN ....')
Run Code Online (Sandbox Code Playgroud)
更新:
刚刚注意到 postgresql 标签.. postgresql 中没有ON UPDATE列(仅适用于外键),因此设置server_onupdate不会执行任何操作。要获得相同的逻辑,您需要创建数据库端触发器或使用 ORM 端onupdate或事件。
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |