Диалектът sqlalchemy postgres поддържа UUID колони. Това е лесно (и въпросът е специално postgres) - не разбирам защо всички други отговори са толкова сложни.
Ето един пример:
from sqlalchemy.dialects.postgresql import UUID
from flask_sqlalchemy import SQLAlchemy
import uuid
db = SQLAlchemy()
class Foo(db.Model):
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
Внимавайте да не пропуснете да предадете callable
uuid.uuid4
в дефиницията на колоната, вместо да извиква самата функция с uuid.uuid4()
. В противен случай ще имате една и съща скаларна стойност за всички екземпляри от този клас. Повече подробности тук:
Скаларен, Python извикващ израз или ColumnElement израз, представляващ стойността по подразбиране за тази колона, която ще бъде извикана при вмъкване, ако тази колона по друг начин не е посочена в клаузата VALUES на вмъкването.