1. ollyc
  2. fresco-sqlalchemy

Overview

HTTPS SSH

SQLAlchemy support for Fresco

Adding SQLAlchemy to your application

Use fresco_sqlalchemy.SQLAlchemy to configure your application for use with SQLAlchemy. By default this reads database connection configuration from app, and adds WSGI middleware into your application to manage SQLAlchemy sessions:

from fresco import FrescoApp
from fresco_sqlalchemy import SQLAlchemy

# Create a new Fresco app
app = FrescoApp()

# Connection info is loaded from your application configuration
app.options.SQLALCHEMY = {
    'default': 'driver://user:password@localhost/database',
}

sqlalchemy = SQLAlchemy(app)

You can call your configuration variable something else if you prefer:

app.options.DATABASES = {
    'default': 'driver://user:password@localhost/database',
}
sqlalchemy = SQLAlchemy(app, options_key='DATABASES')

Or skip this step entirely and provide database configuration directly to the constructor:

sqlalchemy = SQLAlchemy(
    app,
    databases={'default': 'driver://user:password@localhost/database',})

Accessing sessions

You can access sqlalchemy sessions directly on the SQLAlchemy object:

sqlalchemy = SQLAlchemy(app)
session = sqlalchemy.getsession()
session.query(...)

Or via fresco.context:

from fresco import context
session = context.sqlalchemy.default
session.query(...)

Multiple connection support

You can specify as many database connection URLs as you want:

app.options.SQLALCHEMY = {
    'staging': 'driver://user:password@localhost/staging_db',
    'production': 'driver://user:password@localhost/production_db',
}

These can be accessed by name, using getsession:

sqlalchemy = SQLAlchemy(app)
sqlalchemy.getsession('staging')

Or from fresco.context:

default_session = context.sqlalchemy.staging
cms_session = context.sqlalchemy.production

Engine configuration

Extra arguments to the SQLAlchemy constructor are passed to SQLAlchemy's create_engine function. This makes it possible to specify options such as echo=True to log all SQL queries produced by SQLAlchemy:

sqlalchemy = SQLAlchemy(app, echo=True)