.. _broker-sqlalchemy:

==================
 Using SQLAlchemy
==================

.. _broker-sqlalchemy-installation:

Installation
============

.. _broker-sqlalchemy-configuration:

Configuration
=============

Celery needs to know the location of your database, which should be the usual
SQLAlchemy connection string, but with 'sqla+' prepended to it::

    BROKER_URL = 'sqla+sqlite:///celerydb.sqlite'

This transport uses only the :setting:`BROKER_URL` setting, which have to be
an SQLAlchemy database URI.


Please see `SQLAlchemy: Supported Databases`_ for a table of supported databases.

Here's a list of examples using a selection of other `SQLAlchemy Connection String`_'s:

.. code-block:: python

    # sqlite (filename)
    BROKER_URL = 'sqla+sqlite:///celerydb.sqlite'

    # mysql
    BROKER_URL = 'sqla+mysql://scott:tiger@localhost/foo'

    # postgresql
    BROKER_URL = 'sqla+postgresql://scott:tiger@localhost/mydatabase'

    # oracle
    BROKER_URL = 'sqla+oracle://scott:tiger@127.0.0.1:1521/sidname'

.. _`SQLAlchemy: Supported Databases`:
    http://www.sqlalchemy.org/docs/core/engines.html#supported-databases

.. _`SQLAlchemy Connection String`:
    http://www.sqlalchemy.org/docs/core/engines.html#database-urls

.. _sqlalchemy-results-configuration:

Results
-------

To store results in the database as well, you should configure the result
backend.  See :ref:`conf-database-result-backend`.

.. _broker-sqlalchemy-limitations:

Limitations
===========

The SQLAlchemy database transport does not currently support:

    * Remote control commands (:program:`celery events` command, broadcast)
    * Events, including the Django Admin monitor.
    * Using more than a few workers (can lead to messages being executed
      multiple times).