postgresql - 如何使用 SQLAlchemy 将列默认设置为 PostgreSQL 函数?

标签 postgresql sqlalchemy uuid

我在 SQLAlchemy 中定义的所有表都有一个 UUID 类型的 id 列。

from sqlalchemy.ext.declarative import declarative_base
from uuid import uuid4
Base = declarative_base()

class MyTable(Base):
    id = Column(UUIDtype, default=uuid4, primary_key=True)

其中 UUIDtype 是 PostgreSQL UUID 类型的特殊列类型。这在 PostgreSQL 中成功创建了 UUID 列,但仅在使用 SQLAlchemy 插入时生成默认 UUID 值。这对于我的一些用例来说很好,但我想在事物的 PostgreSQL 端分配列的默认值,以防插入发生在 SQLAlchemy 之外。

以下 SQL 命令将正确的默认值放在列上:

ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4()

如何通过 SQLAlchemy 模型定义将此 uuid_generate_v4() 函数指定为列默认值?如果唯一的选择是通过执行原始 SQL 语句,我是否有办法将该语句的执行挂接到表创建过程中?

最佳答案

你应该使用 server_default参数。

id = Column(UUIDtype, server_default=text("uuid_generate_v4()"), primary_key=True)

参见 Server Side Defaults获取更多信息。

关于postgresql - 如何使用 SQLAlchemy 将列默认设置为 PostgreSQL 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20532531/

相关文章:

python - mysql - 如何确定存储可变字符串的字段的长度?

algorithm - 用于编码 UUIDS 的传统算法的替代方案(例如 Base32、Base62)

sql - Postgres SQL 查询,将对关联数组中的字段进行分组

sql - 如何使用空字段执行查询?

python - 如何在 sqlalchemy 中强制执行 sqlite select 更新事务行为

c - v5 UUID。命名空间的 UUID 和名称有什么区别

architecture - Cassandra uuid 作为行键

python - 访问在 sqlalchemy 中没有 key 的 json

postgresql - Azure Database for PostgreSQL 灵活服务器部署失败,并出现数据库名称参数错误

来自具有多个 where 条件的 SQL 的 sqlalchemy 查询