2013-12-12 2 views
16

SQLAlchemy에 정의 된 모든 테이블에는 UUID 유형의 ID 열이 있습니다. UUIDtype는 PostgreSQL의 UUID 유형에 대한 특별한 열 형식입니다SQLAlchemy를 사용하여 열 기본값을 PostgreSQL 함수로 설정하는 방법은 무엇입니까?

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) 

. 이렇게하면 PostgreSQL에서 UUID 열을 성공적으로 만들지 만 SQLAlchemy를 사용하여 삽입 할 때만 기본 UUID 값을 생성합니다. 내 사용 사례 중 일부에 대해서는 문제가 없지만 SQLAlchemy 외부에서 삽입이 발생할 경우 PostgreSQL 측면에 열의 기본값을 할당하려고합니다.

컬럼에 SQL 명령 장소 다음 적절한 기본값 :

ALTER TABLE my_table ALTER COLUMN id SET DEFAULT uuid_generate_v4() 
내가 SQLAlchemy의 모델 정의를 통해 열 기본값으로이 uuid_generate_v4() 기능을 할당 할 수있는 방법

? 단 하나의 옵션이 원시 SQL 문을 실행하는 것이라면 그 명령문 실행을 테이블 생성 프로세스에 연결하는 방법이 있습니까?

답변

20

이 경우 server_default 매개 변수를 사용해야합니다.

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

자세한 내용은 Server Side Defaults을 참조하십시오.

+0

감사합니다. 그게 내가 필요한 것입니다. –

+1

'uuid-ossp' 모듈을'create extension uuid-ossp'로 설치하십시오 – mozillazg

+0

또는'uuid_generate_v4()'대신'gen_random_uuid()'를 사용하고''create extension pgcrypto''로''pgcrypto'를 설치하십시오. – mozillazg

관련 문제