이것은 실제 해결책에서 멀리 떨어져있을 가능성이 있지만이 작업을 수행하는 가장 좋은 방법은 서브 클래스 sqlalchemy.schema._CreateDropBase
입니다.
from sqlalchemy.schema import _CreateDropBase
class CreateDomain(_CreateDropBase):
'''Represent a CREATE DOMAIN statement.'''
__visit_name__ = 'create_domain'
def __init__(self, element, bind=None, **kw):
super(CreateDomain, self).__init__(element, bind=bind, **kw)
class DropDomain(_CreateDropBase):
'''Represent a DROP BASE statement.'''
__visit_name__ = 'drop_domain'
def __init__(self, element, bind=None, **kw):
super(DropDomain, self).__init__(element, bind=bind, **kw)
@compiles(CreateDomain, 'postgresql')
def visit_create_domain(element, compiler, **kw):
text = '\nCREATE DOMAIN %s AS %s' % (
compiler.prepare.format_column(element.name),
compiler.preparer.format_column(element.type_)) # doesn't account for arrays and such I don't think
default = compiler.get_column_default_string(column)
if default is not None:
text += " DEFAULT %s" % default
return text
분명히 이것은 불완전하지만 분명히 충분히 원한다면 좋은 출발점이되어야합니다. :)
이 질문은 좀 더 진보 된 것 같습니다. 아마도 SQLAlchemy 목록에서 더 나은 도움을 얻을 수 있습니다. 유형의 사용법에 대해서는'TEXT'를 서브 클래스 화하고 그 이름을'email_address'로 변경하는 방법을 찾길 권한다. 이것은 가장 간단한 방법 일 것이다 (그러나 나는 그것을하는 방법을 모른다). SQLAlchemy가 아직 존재하지 않는 유형을 생성하기위한 인터페이스를 가지고 있는지 확실하지 않기 때문에 후자 부분은 아마도 리터럴 SQL로 수행 할 수 있습니다. – javex
@javex 지금은 맞춤 DDL을 발행하여 도메인을 만들고 있는데,'UserDefinedType'을 하위 클래스로 분류하여 해당 열 유형 정의에'email_address'를 반환했습니다. 이상적이지는 않지만 충분히 잘 작동합니다. SQLA 목록을 확인할 수 있습니다.이 제안에 감사드립니다. – skyler