MySQL Shell is an advanced client for MySQL Server that allow system administrator to perform both cluster and instance level operations, using a single binary.
This project provides a Python client to perform the most common set of operations, in addition to a set of predefined queries to cover most of the common use-cases.
-
Install the package from PyPi:
pip install mysql-shell-client
-
Import and build the executors:
from mysql_shell.executors import LocalExecutor from mysql_shell.models import ConnectionDetails cluster_conn = ConnectionDetails( username="...", password="...", host="...", port="...", ) instance_conn = ConnectionDetails( username="...", password="...", host="...", port="...", ) cluster_executor = LocalExecutor(cluster_conn, "mysqlsh") instance_executor = LocalExecutor(instance_conn, "mysqlsh")
-
Import and build the query builders [optional]:
from mysql_shell.builders import CharmLockingQueryBuilder # This is just an example builder = CharmLockingQueryBuilder("mysql", "locking") query = builder.build_table_creation_query() rows = instance_executor.execute_sql(query)
-
Import and build the clients:
from mysql_shell.builders.quoting import StringQueryQuoter from mysql_shell.clients import MySQLClusterClient, MySQLInstanceClient quoter = StringQueryQuoter() cluster_client = MySQLClusterClient(cluster_executor, quoter) instance_client = MySQLInstanceClient(instance_executor, quoter)
In order to install all the development packages:
poetry install --all-extrasAll Python files are linted using Ruff, to run it:
tox -e lintProject testing is performed using Pytest, to run them:
tox -e unitexport MYSQL_DATABASE="test"
export MYSQL_USERNAME="root"
export MYSQL_PASSWORD="root_pass"
export MYSQL_SHELL_PATH="mysqlsh"
sudo --preserve-env docker compose -f compose/mysql-8.0.yaml up --wait && tox -e integration
sudo --preserve-env docker compose -f compose/mysql-8.0.yaml downCommits can be tagged to create releases of the package, in order to do so:
- Bump up the version within the
pyproject.tomlfile. - Add a new section to the
CHANGELOG.md. - Commit + push the changes.
- Trigger the release workflow.