我们要避免在多处地方不断的创建session,所以我们可以使用上下文的方式统一封装session的建立以及关闭:
from contextlib import contextmanager
from sqlalchemy import create_engine
from sqlalchemy.orm import Session
from modules.config.config import DatabaseConfig
engine = create_engine("postgresql+psycopg2://" + DatabaseConfig().get_database_url(),
pool_size=20,
max_overflow=0)
session = Session(engine)
@contextmanager
def session_maker(session=session):
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
session.close()
在想使用session的地方直接使用with语句即可:
with session_maker() as session:
.......
session.addd(A)