HDEラボsessionmaker()では、データベースに接続するごとに違うオブジェクトが返ってきますが、scoped_session()では、同じオブジェクトが返ってきます。session.remove()すると内部保持しているセッションを捨ててくれる。sessionmaker()は、アプリケーション1つにデータベースが複数という場合に使用します。scoped_session()は、アプリケーション1つにデータベースが1つという場合に使用します。scoped_sessionは常に同じオブジェクトを返すわけではなくて、スレッドローカルでセッションを保持している。これはWebアプリケーションがマルチスレッドで実行されている場合に、リクエストごとでsessionを扱えるようになっている。あと、アプリケーション1つにデータベースが1つの意味がよく分からないのだが(例でもデータベースは1つだけのようだし...)、垂直分散したければ、複数metadataを用意してそれぞれに別のデータベースへの接続をバインドして、Table作成時に各metadataを割り振ってあげればいいので、セッションは無関係。