Metadata-Version: 2.1
Name: dbschema
Version: 1.4.2
Summary: Schema migration made easy
Home-page: https://github.com/gabfl/dbschema
Author: Gabriel Bordeaux
Author-email: pypi@gab.lc
License: MIT
Platform: UNKNOWN
Classifier: Topic :: Database
Classifier: Topic :: Database :: Database Engines/Servers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: MacOS
Classifier: Operating System :: POSIX :: Linux
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python
Classifier: Development Status :: 4 - Beta
Requires-Dist: argparse
Requires-Dist: PyYAML
Requires-Dist: pymysql
Requires-Dist: psycopg2-binary

dbschema
========

|Pypi| |Build Status| |codecov| |MIT licensed|

``dbschema`` is a tool to run MySQL or PostgreSQL migrations
automatically. Using a table, it keeps a state of previous migrations to
avoid duplicates.

Features:

-  Support for MySQL and PostgreSQL
-  Optional pre and post-migration queries (for example to update
   privileges)
-  Multiple migrations in multiple databases can be processed as one.

Installation
------------

Install ``dbschema``
~~~~~~~~~~~~~~~~~~~~

.. code:: bash

   # Install required packages
   apt-get update
   apt-get install --yes libpq-dev gcc python3-dev

   pip3 install dbschema

Create a config file
~~~~~~~~~~~~~~~~~~~~

Create the file ``~/.dbschema.yml`` and add your databases
configuration. `See example <dbschema_sample.yml>`__

Create migrations table
~~~~~~~~~~~~~~~~~~~~~~~

``dbschema`` uses a table called ``migrations_applied`` to keep track of
migrations already applied to avoid duplication. See the schema for
`MySQL <schema/mysql.sql>`__ or `PostgreSQL <schema/postgresql.sql>`__.

Migrations folder structure
---------------------------

For each database, you need to have a migration path (setting ``path``
in the migration file).

Within that path you need to create one folder per migration. This
folder must contain a file called ``up.sql`` with the SQL queries and
optionally a file called ``down.sql`` for rollbacks.

::

   /path/to/migrations/db1/
   |-- migration1/
   |   |-- up.sql
   |   |-- down.sql
   |-- migration2/
   |   |-- up.sql
   |...
   /path/to/migrations/db2/
   |-- migration1/
   |   |-- up.sql
   |-- migration2/
   |   |-- up.sql
   |   |-- down.sql
   |...

Usage
-----

Apply pending migrations
~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: bash

   dbschema

   # or to specify a config file path
   dbschema --config /path/to/config.yml

   # or to migrate only a specific database
   dbschema --tag db1

Rollback
~~~~~~~~

.. code:: bash

   dbschema --tag db1 --rollback migration1

Example
-------

.. code:: bash

   $ dbschema
     * Applying migrations for db1 (`test` on postgresql)
       -> Migration `migration1` applied
       -> Migration `migration2` applied
       -> Migration `migration3` applied
     * Migrations applied
     * Applying migrations for db2 (`test` on mysql)
       -> Migration `migration1` applied
       -> Migration `migration2` applied
       -> Migration `migration3` applied
     * Migrations applied
   $
   $ dbschema --tag db2 --rollback migration1
     * Rolling back mysql -> `migration1`
       -> Migration `migration1` has been rolled back
   $

.. |Pypi| image:: https://img.shields.io/pypi/v/dbschema.svg
   :target: https://pypi.org/project/dbschema
.. |Build Status| image:: https://travis-ci.org/gabfl/dbschema.svg?branch=master
   :target: https://travis-ci.org/gabfl/dbschema
.. |codecov| image:: https://codecov.io/gh/gabfl/dbschema/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/gabfl/dbschema
.. |MIT licensed| image:: https://img.shields.io/badge/license-MIT-green.svg
   :target: https://raw.githubusercontent.com/gabfl/dbschema/master/LICENSE


