I have a sequence of new objects. They all look like similar to this:
Foo(pk_col1=x, pk_col2=y, val=\'bar\')
Some of those are Foo that exist (i.e. only val diff
I think you are after new_obj = session.merge(obj). This will merge an object in a detached state into the session if the primary keys match and will make a new one otherwise. So session.save(new_obj) will work for both insert and update.
session.save(new_obj)