The way I design it to be used is like

```python
model = FoobarModel(session)
model.do_something()
```

Creating a model is very cheap, there is noting it creates internally, that's just all about business logic. So you can create them around everywhere, use them and drop them as you like. 

You may ask why not just use the session in a global variable or class variable manner. Well, because "global" means dirty in many cases. For example, when we want to use multi-threading, global variable makes it difficult to rewrite the code. You will need a session for each thread. Sometimes you may need to connect to multiple database if you are doing sharding in database. 

In short, for many cases, dependency to a global session object makes it hard to do many important improvement afterward. This is why I like to pass session object only when it is needed.