How to Bulk Insert sqlalchemy subclasses
I figured it out so SQLALCHEMY has a parameter in bulk insert mapping called return_defaults

WARNING: This is straight from the docs return_defaults – when True, rows that are missing values which generate defaults, namely integer primary key defaults and sequences, will be inserted one at a time, so that the primary key value is available. In particular this will allow joined-inheritance and other multi-table mappings to insert correctly without the need to provide primary key values ahead of time; however, Session.bulk_insert_mappings.return_defaults greatly reduces the performance gains of the method overall. If the rows to be inserted only refer to a single table, then there is no reason this flag should be set as the returned default information is not used.

so then all you have to do is this 

db.session.bulk_insert_mappings(model_classes['Apple'], apple_list, return_defaults=True) 


it's still alot faster than db.session.add