Again, Jonathan, thanks for the pointer.  Here is what I came up with:

class DALBoolean(types.TypeDecorator):
    '''
    Boolean type for DAL-based boolean fields
    '''

    impl = types.String(1)

    def process_bind_param(self, value, dialect):
        if isinstance(value, str):
            if value not in ['T']:
                value = False

        return 'T' if value else 'F'

    def process_result_value(self, value, dialect):
        return True if value and value.upper() == 'T' else False

class RequisitionPeriod(Base):
    __tablename__ = 'requisition_period'

    id = Column(BigInteger, primary_key=True)
    week_ends = Column(Date)
    order_cutoff = Column(Date)
    current = Column(DALBoolean(), default='F')

    def __repr__(self):
        return '%s' % self.week_ends

It is working for all my use cases now.

I can query the 'current' flag using either boolean values or 'T' / 'F'
I can update the value using boolean or 'T'/'F'

Anyone see anything I'm missing?


-Jim


On Wednesday, January 9, 2019 at 2:45:27 PM UTC-6, Jim Steil wrote:
>
> Jonathon
>
> You and me both!  To make matters worse, I'm the one that did it.  The web 
> framework I used does that by default.
>
> Thanks for the link, looking through it now.
>
> -Jim
>
>
> On Wed, Jan 9, 2019 at 2:26 PM Jonathan Vanasco <[email protected]> 
> wrote:
>
>> I'm sorry the database was implemented like this. 
>>
>> I believe you'll have the best luck using a CustomType or TypeDecorator
>>   * https://docs.sqlalchemy.org/en/latest/core/custom_types.html
>>
>> Basically you would create a custom type that supports 'T' and 'F' in SQL 
>> but True/False in Python, and set that field/column to be that type 
>> (instead of String)
>>
>> That will allow you to just use Booleans in Python, but generate the 
>> correct SQL on the database.
>>
>> -- 
>> 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.

Reply via email to