Ответ 1
Для этого вы должны использовать параметр server_default
.
id = Column(UUIDtype, server_default=text("uuid_generate_v4()"), primary_key=True)
Дополнительные сведения см. В разделе " Значения по умолчанию на стороне сервера".
Все мои таблицы, определенные в SQLAlchemy, имеют столбец id типа UUID.
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
- специальный тип столбца для типа UUID PostgreSQL. Это успешно создает столбец UUID в PostgreSQL, но только генерирует значение UUID по умолчанию при вставке с использованием SQLAlchemy. Это хорошо для некоторых моих вариантов использования, но я хочу назначить значение столбца по умолчанию для PostgreSQL, если вставка происходит вне SQLAlchemy.
Следующая команда SQL помещает правильное значение по умолчанию в столбец:
ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4()
Как я могу присвоить эту uuid_generate_v4()
как значение по умолчанию столбца с помощью определения модели SQLAlchemy? Если единственный вариант заключается в выполнении необработанного SQL-оператора, есть ли способ, чтобы я мог задействовать выполнение этого оператора в процессе создания таблицы?
Для этого вы должны использовать параметр server_default
.
id = Column(UUIDtype, server_default=text("uuid_generate_v4()"), primary_key=True)
Дополнительные сведения см. В разделе " Значения по умолчанию на стороне сервера".