.. _migration_operations: ==================== Migration Operations ==================== .. currentmodule:: django_mysql.operations MySQL-specific `migration operations `_ that can all be imported from ``django_mysql.operations``. Install Plugin -------------- .. class:: InstallPlugin(name, soname) An ``Operation`` subclass that installs a MySQL plugin. Runs ``INSTALL PLUGIN name SONAME soname``, but does a check to see if the plugin is already installed to make it more idempotent. Docs: `MySQL `__ / `MariaDB `__. .. attribute:: name This is a required argument. The name of the plugin to install. .. attribute:: soname This is a required argument. The name of the library to install the plugin from. Note that on MySQL you must include the extension (e.g. ``.so``, ``.dll``) whilst on MariaDB you may skip it to keep the operation platform-independent. Example usage: .. code-block:: python from django.db import migrations from django_mysql.operations import InstallPlugin class Migration(migrations.Migration): dependencies = [] operations = [ # Install https://mariadb.com/kb/en/mariadb/metadata_lock_info/ InstallPlugin("metadata_lock_info", "metadata_lock_info.so") ] Install SOName -------------- .. class:: InstallSOName(soname) **MariaDB** only. An ``Operation`` subclass that installs a MariaDB plugin library. One library may contain multiple plugins that work together, this installs all of the plugins in the named library file. Runs ``INSTALL SONAME soname``. Note that unlike ``InstallPlugin``, there is no idempotency check to see if the library is already installed, since there is no way of knowing if all the plugins inside the library are installed. Docs: `MariaDB `_. .. attribute:: soname This is a required argument. The name of the library to install the plugin from. You may skip the file extension (e.g. ``.so``, ``.dll``) to keep the operation platform-independent. Example usage: .. code-block:: python from django.db import migrations from django_mysql.operations import InstallSOName class Migration(migrations.Migration): dependencies = [] operations = [ # Install https://mariadb.com/kb/en/mariadb/metadata_lock_info/ InstallSOName("metadata_lock_info") ] Alter Storage Engine -------------------- .. class:: AlterStorageEngine(name, to_engine, from_engine=None) An ``Operation`` subclass that alters the model's table's storage engine. Because Django has no knowledge of storage engines, you must provide the previous storage engine for the operation to be reversible. .. attribute:: name This is a required argument. The name of the model to alter. .. attribute:: to_engine This is a required argument. The storage engine to move the model to. .. attribute:: from_engine This is an optional argument. The storage engine the model is moving from. If you do not provide this, the operation is not reversible. .. note:: If you're using this to move from MyISAM to InnoDB, there's a page for you in the MariaDB knowledge base - `Converting Tables from MyISAM to InnoDB `_. Example usage: .. code-block:: python from django.db import migrations from django_mysql.operations import AlterStorageEngine class Migration(migrations.Migration): dependencies = [] operations = [AlterStorageEngine("Pony", from_engine="MyISAM", to_engine="InnoDB")]