MySQL Shell Python client

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.
🧑💻 Usage
-
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
builder = CharmLockingQueryBuilder("mysql", "locking")
query = builder.build_table_creation_query()
rows = instance_executor.execute_sql(query)
-
Import and build the clients:
from mysql_shell.clients import MySQLClusterClient, MySQLInstanceClient
cluster_client = MySQLClusterClient(cluster_executor)
instance_client = MySQLInstanceClient(instance_executor)
🔧 Development
Dependencies
In order to install all the development packages:
poetry install --all-extras
Linting
All Python files are linted using Ruff, to run it:
tox -e lint
Testing
Project testing is performed using Pytest, to run them:
tox -e unit
export MYSQL_DATABASE="test"
export MYSQL_USERNAME="root"
export MYSQL_PASSWORD="root_pass"
export MYSQL_SHELL_PATH="mysqlsh"
podman-compose -f compose/mysql-8.0.yaml up --detach && tox -e integration
podman-compose -f compose/mysql-8.0.yaml down
Release
Commits can be tagged to create releases of the package, in order to do so:
- Bump up the version within the
pyproject.toml file.
- Add a new section to the
CHANGELOG.md.
- Commit + push the changes.
- Trigger the release workflow.