postgres PGBoolean does not perform translation; returns 0 or 1 (which isnt compabible with PG boolean bind params)

Issue #400 resolved
Mike Bayer repo owner created an issue

No description provided.

Comments (1)

  1. Mike Bayer reporter
    • changed status to wontfix
    • removed milestone

    cant reproduce this; are you using psycopg2? see test/sql/testtypes.py BooleanTest - run here with SQL and result set echoing with PG 8.1:

    z-eeks-Computer:~/dev/sqlalchemy classic$ python test/sql/testtypes.py --log-debug=sqlalchemy.engine --db postgres BooleanTest
    INFO:sqlalchemy.engine.base.Engine.0x..f0:
    CREATE TABLE booltest (
            id SERIAL NOT NULL, 
            value BOOLEAN, 
            PRIMARY KEY (id)
    )
    
    
    INFO:sqlalchemy.engine.base.Engine.0x..f0:None
    INFO:sqlalchemy.engine.base.Engine.0x..f0:COMMIT
    testbasic (__main__.BooleanTest) ... INFO:sqlalchemy.engine.base.Engine.0x..f0:INSERT INTO booltest (id, value) VALUES (%(id)s, %(value)s)
    INFO:sqlalchemy.engine.base.Engine.0x..f0:{'id': 1, 'value': True}
    INFO:sqlalchemy.engine.base.Engine.0x..f0:COMMIT
    INFO:sqlalchemy.engine.base.Engine.0x..f0:INSERT INTO booltest (id, value) VALUES (%(id)s, %(value)s)
    INFO:sqlalchemy.engine.base.Engine.0x..f0:{'id': 2, 'value': False}
    INFO:sqlalchemy.engine.base.Engine.0x..f0:COMMIT
    INFO:sqlalchemy.engine.base.Engine.0x..f0:INSERT INTO booltest (id, value) VALUES (%(id)s, %(value)s)
    INFO:sqlalchemy.engine.base.Engine.0x..f0:{'id': 3, 'value': True}
    INFO:sqlalchemy.engine.base.Engine.0x..f0:COMMIT
    INFO:sqlalchemy.engine.base.Engine.0x..f0:INSERT INTO booltest (id, value) VALUES (%(id)s, %(value)s)
    INFO:sqlalchemy.engine.base.Engine.0x..f0:{'id': 4, 'value': True}
    INFO:sqlalchemy.engine.base.Engine.0x..f0:COMMIT
    INFO:sqlalchemy.engine.base.Engine.0x..f0:INSERT INTO booltest (id, value) VALUES (%(id)s, %(value)s)
    INFO:sqlalchemy.engine.base.Engine.0x..f0:{'id': 5, 'value': True}
    INFO:sqlalchemy.engine.base.Engine.0x..f0:COMMIT
    INFO:sqlalchemy.engine.base.Engine.0x..f0:SELECT booltest.id, booltest.value 
    FROM booltest 
    WHERE booltest.value = %(booltest_value)s
    INFO:sqlalchemy.engine.base.Engine.0x..f0:{'booltest_value': True}
    DEBUG:sqlalchemy.engine.base.Engine.0x..f0:Row (1, True)
    DEBUG:sqlalchemy.engine.base.Engine.0x..f0:Row (3, True)
    DEBUG:sqlalchemy.engine.base.Engine.0x..f0:Row (4, True)
    DEBUG:sqlalchemy.engine.base.Engine.0x..f0:Row (5, True)
    INFO:sqlalchemy.engine.base.Engine.0x..f0:SELECT booltest.id, booltest.value 
    FROM booltest 
    WHERE booltest.value = %(booltest_value)s
    INFO:sqlalchemy.engine.base.Engine.0x..f0:{'booltest_value': False}
    DEBUG:sqlalchemy.engine.base.Engine.0x..f0:Row (2, False)
    ok
    INFO:sqlalchemy.engine.base.Engine.0x..f0:
    DROP TABLE booltest
    INFO:sqlalchemy.engine.base.Engine.0x..f0:None
    INFO:sqlalchemy.engine.base.Engine.0x..f0:COMMIT
    
    ----------------------------------------------------------------------
    Ran 1 test in 2.432s
    

    above, the rows that come back from the database contain True and False values. this is psycopg2 doing it, since neither the Boolean nor the PGBoolean contain any result-set (or bind parameter) conversion logic. (SLBoolean in SQLite does).

  2. Log in to comment