On Fri, Sep 13, 2019, at 10:46 AM, Gary L wrote:
> I have a declarative model as below
> 
> 
> class User(Base):
>  __tablename__ = 'users'
>  __table_args__ = {
>  'schema':'internal',
>  'extend_existing': True,
>  'mustexist': True
>  }
> 
> 
> The table has a column named 'registration_date'. Since I am working with 
> pandas I'd like to wrap this in a pandas timestamp when using it.
> Ideally something like this would be possible:
> 
> def registration_date(self):
> return pd.to_datetime(self.registration_date)
> 
> But this causes a name collision between the mapped column and this new 
> method so trying to query the column via User.registration_date will not work 
> as this returns the method instead of the queryable attribute. The natural 
> solution would be to rename the method but that isn't ideal as I want all my 
> users to have the same idea of a registration date. Is this possible in 
> sqlalchemy?

the canonical pattern for this is to use the synonym:

https://docs.sqlalchemy.org/en/13/orm/mapped_attributes.html?highlight=synonym#synonyms

in order to have the direct column attribute under a different name, you would 
define it in the mapping. since it looks like you are using reflection and I 
would assume passing the reflected MetaData to the declarative base 
(interesting!) this would redefine the reflected column in the Table with the 
one you provide here, but shouldn't have any impact:

class User(Base):
 # ...
 _registration_date = Column("registration_date", DateTime)

 @synonym_for("_registration_date")
 @property
 def registration_date(self):
 return pd.to_datetime(self._registration_date)

There is also an entirely different approach you could use which would be to 
create a special DateTime class that returns the pandas datetimes directly at 
the Core level, using TypeDecorator. However, using the synonym approach above 
is perfectly fine unless it becomes unwieldy.





> 

> --
>  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 sqlalchemy+unsubscr...@googlegroups.com.
>  To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/b7cd73e2-a69b-44e9-b2fa-bdc302c4b7f6%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/b7cd73e2-a69b-44e9-b2fa-bdc302c4b7f6%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 
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 sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/6d4397c0-76bf-49aa-8519-c07e30ce6a82%40www.fastmail.com.

Reply via email to