 <p>The construct you are looking for is called <code>column_property</code>. You could use a secondary mapper to actually replace the amount column. Are you sure you are not making things too difficult for yourself by not just storing the negative values in the database directly or giving the "corrected" column a different name?</p> <pre><code>from sqlalchemy.orm import mapper, column_property wrongmapper = sqlalchemy.orm.mapper(Transaction, Transaction.__table, non_primary = True, properties = {'amount': column_property(case([(Transaction.transfer_account_id==1, -1*Transaction.amount)], else_=Transaction.amount)}) Session.query(wrongmapper).filter(...) </code></pre>