2013-12-12 22 views
16

SQLAlchemy'de tanımlanan tüm tablolarım, UUID türünde bir kimlik sütununa sahiptir. UUIDtype PostgreSQL UUID'si türü için özel bir sütun türüSQLAlchemy kullanarak PostgreSQL işlevine bir sütun varsayılanı nasıl ayarlanır?

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) 

. Bu, PostgreSQL'de UUID sütununu başarıyla oluşturur, ancak SQLAlchemy kullanarak eklerken yalnızca varsayılan bir UUID değeri üretir. Bu, bazı kullanım durumlarım için iyi, ancak SQLAlchemy dışında bir insert oluşması durumunda, sütunların varsayılanlarını PostgreSQL tarafına atamak istiyorum.

sütun üzerinde SQL komutu yerleri aşağıdaki uygun varsayılan:

ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4() 
Ben SQLAlchemy modeli tanımı üzerinden sütun varsayılan olarak bu uuid_generate_v4() işlevi atayabilirsiniz nasıl

? Tek seçenek, ham bir SQL deyimini yürütmekse, bu ifadenin yürütmesini tablo oluşturma işlemine bağlamanın bir yolu var mı?

cevap

20

Bunun için server_default parametresini kullanmalısınız.

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

Daha fazla bilgi için bkz. Server Side Defaults.

+0

Teşekkür ederiz. Tam olarak ihtiyacım olan buydu. –

+1

'uuid-ossp' modülünü' uuid-gspsp' – mozillazg

+0

biçiminde oluşturun ya da 'uuid_generate_v4()' yerine 'gen_random_uuid() işlevini kullanın ve' pgcrypto' yerine 'create extension pgcrypto' yazın – mozillazg

İlgili konular