You would normally do this by creating a custom column type:
https://docs.sqlalchemy.org/en/latest/core/custom_types.html#types-sql-value-processing
Here's an untested example:
class IPAddress(TypeDecorator):
impl = VARBINARY(16)
def bind_expression(self, bindvalue):
return func.inet6_aton(bindvalue, type_=self)
def column_expression(self, col):
return func.inet6_ntoa(col, type_=self)
class IP(Base):
__tablename__ = 'ip'
ip = column(IPAddress(), nullable=False, index=True)
Depending on what else you want to do with this column, you may also
want to define a custom Comparator.
Hope that helps,
Simon