擅长:python、mysql、java
<p>是的,这是正确的方法。</p>
<p>示例:</p>
<p>使用<a href="http://packages.python.org/Flask-SQLAlchemy/" rel="nofollow noreferrer">Flask-sqlalchemy</a>扩展名的<a href="http://flask.pocoo.org/" rel="nofollow noreferrer">Flask</a>微框架执行您描述的操作。它还会在每个HTTP请求(“view”函数)结束时自动执行.remove(),因此会话由当前线程释放。仅调用.commit()是不够的,应使用.remove()。</p>
<p>不使用烧瓶视图时,我通常使用“with”语句:</p>
<pre><code>@contextmanager
def get_db_session():
try:
yield session
finally:
session.remove()
with get_db_session() as session:
# do something with session
</code></pre>
<p>您可以创建一个类似的装饰器。</p>
<p>作用域会话创建一个DBMS连接池,因此这种方法比在每个HTTP请求时打开/关闭会话更快。它还可以与greenlet(gevent或eventlet)配合使用。</p>