В сочетании с SQLAlchemy я использую SQLService в качестве уровня интерфейса для менеджера сеансов SQLAlchemy и уровня ORM, который хорошо централизует основные функциональные возможности SQLAlchemy.
Вот мое определение компонента промежуточного программного обеспечения:
class DatabaseSessionComponent(object):
""" Initiates a new Session for incoming request and closes it in the end. """
def __init__(self, sqlalchemy_database_uri):
self.sqlalchemy_database_uri = sqlalchemy_database_uri
def process_resource(self, req, resp, resource, params):
resource.db = sqlservice.SQLClient(
{
"SQL_DATABASE_URI": self.sqlalchemy_database_uri,
"SQL_ISOLATION_LEVEL": "SERIALIZABLE",
"SQL_ECHO": False,
"SQL_ECHO_POOL": False,
"SQL_CONVERT_UNICODE": True,
"SQL_POOL_RECYCLE": 3600,
"SQL_AUTOCOMMIT": False,
"SQL_AUTOFLUSH": True,
"SQL_EXPIRE_ON_COMMIT": True,
},
model_class=BaseModel,
)
def process_response(self, req, resp, resource):
if hasattr(resource, "db"):
resource.db.disconnect()
С его экземпляром в экземпляре API здесь:
api = falcon.API(
middleware=[
DatabaseSessionComponent(os.environ["SQLALCHEMY_DATABASE_URI"]),
]
)