Bu büyük olasılıkla bir çalışma çözümünden çok uzak, ancak bunu yapmanın en iyi yolunun sqlalchemy.schema._CreateDropBase
numaralı alt sınıf olabileceğini düşünüyorum.
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
Açıkçası, bu eksik, ama bu kötü yeterince istiyorsanız size iyi bir başlangıç noktası vermelidir. :)
Bu soru biraz daha gelişmiş gibi görünüyor, belki de SQLAlchemy listesinde daha iyi yardım bulabilirsiniz. Türün kullanımı için 'TEXT' alt sınıfının bir yolunu bulmayı ve adını 'email_address' olarak değiştirmeyi öneririm. Bu en basit yol olurdu (ama nasıl yapacağımı bilmiyorum). İkinci bölüm muhtemelen SQL tarafından yapılabilir, çünkü SQLAlchemy'nin henüz var olmayan türleri oluşturmak için bir arayüze sahip olduğundan emin değilim. – javex
@javex şimdilik özel DDL yayınlayarak etki alanı oluşturuyorum ve 'typeDefinedType' alt sütununu 'e-posta_adresi' sütun türü tanımı için döndürmek üzere alt sınıflara ayırdım. İdeal değil ama yeterince iyi çalışıyor. SQLA listesine bakabilirim, bu öneri için teşekkür ederim. – skyler