On Wed, Feb 27, 2019 at 1:16 PM spaceman <[email protected]> wrote: > > Hi, > > I am trying to store an IP address in MySQL database using the following > mapping: > > class IP(Base): > > __tablename__ = 'ip' > > ip = Column(VARBINARY(16), nullable=False, index=True) > > VARBINARY is the correct type for storing IP addresses according to: > > https://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton > > My question is how do I run the MySQL function inet6_aton on insertion > and inet6_ntoa on read using SQLAlchemy ORM? > > I know I could do it with python, but I am assuming that it is faster > with MySQL. > > I am running SQLAlchemy 1.2.18 and MariaDB 10.0.38. >
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 -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
