Would using not_ be the appropriate way to get non current addresses? On Thursday, November 30, 2017 at 1:22:56 PM UTC-5, Kevin Foley wrote: > > Ah I see, I was using q = > s.query(A.is_current_address).filter(A.is_current_address==True), just > using A.is_current_address produces the same results you have. Thanks! > > On Thursday, November 30, 2017 at 12:49:37 PM UTC-5, Mike Bayer wrote: >> >> On Thu, Nov 30, 2017 at 10:31 AM, Kevin Foley <[email protected]> wrote: >> > I created a Boolean attribute for an Oracle table that checks if an >> address >> > is the customer's current address. >> > >> > @is_current_address.expression >> > def is_current_address(cls): >> > return and_(cls.eff_date <= func.current_date(), cls.term_date >> >= >> > func.current_date()) >> > >> > When I try to run a query with this it generates the following where >> clause: >> > >> > WHERE (addresses.eff_date <= CURRENT_DATE AND addresses.term_date >= >> > CURRENT_DATE) = 1 >> >> >> can you show me the "try to run a query" part, because that expression >> alone would not be doing the "= 1" thing you are describing. it >> would do that if it were being interpreted in some boolean context >> like "expr == True" or something like that. >> >> Here's an MCVE: >> >> from sqlalchemy import * >> from sqlalchemy.orm import * >> from sqlalchemy.ext.declarative import declarative_base >> from sqlalchemy.ext.hybrid import hybrid_property >> import datetime >> from sqlalchemy.dialects import oracle >> >> Base = declarative_base() >> >> >> class A(Base): >> __tablename__ = 'a' >> id = Column(Integer, primary_key=True) >> eff_date = Column(DateTime) >> term_date = Column(DateTime) >> >> @hybrid_property >> def is_current_address(self): >> return self.eff_date <= datetime.datetime.now() and \ >> self.term_date >= datetime.datetime.now() >> >> @is_current_address.expression >> def is_current_address(cls): >> return and_( >> cls.eff_date <= func.current_date(), >> cls.term_date >= func.current_date()) >> >> s = Session() >> >> q = s.query(A.is_current_address).filter(A.is_current_address) >> >> print q.statement.compile(dialect=oracle.dialect()) >> >> >> output: >> >> SELECT a.eff_date <= CURRENT_DATE AND a.term_date >= CURRENT_DATE AS >> is_current_address >> FROM a >> WHERE a.eff_date <= CURRENT_DATE AND a.term_date >= CURRENT_DATE >> >> tried it back to 1.0.x doesn't render an =1 >> >> >> >> >> >> >> > >> > and generates the Oracle error: >> > >> >> ORA-00933: SQL command not properly ended >> > >> > >> > I believe this type of expression isn't supported in Oracle, however >> > manually removing the "= 1" from the clause makes the query work. Is >> there >> > a different approach I need to take to make sure this is handled >> properly? >> > >> > -- >> > 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. >> >
-- 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.
