title: SQLAlchemy: engine, connection and session difference
body: <p>I use SQLAlchemy and there are at least three entities: <code>engine</code>, <code>session</code> and <code>connection</code>, which have <code>execute</code> method, so if I e.g. want to select all records from <code>table</code> I can do this</p>
  
  <pre><code>engine.execute(select([table])).fetchall()
  </code></pre>
  
  <p>and this</p>
  
  <pre><code>connection.execute(select([table])).fetchall()
  </code></pre>
  
  <p>and even this</p>
  
  <pre><code>session.execute(select([table])).fetchall()
  </code></pre>
  
  <p>- the results will be the same.</p>
  
  <p>As I understand it, if someone uses <code>engine.execute</code> it creates <code>connection</code>, opens <code>session</code> (Alchemy takes care of it for you) and executes the query. But is there a global difference between these three ways of performing such a 
  task?</p>