mycli 1.76.0__tar.gz → 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mycli-1.76.0 → mycli-2.0.0}/.github/workflows/ci.yml +6 -6
- mycli-2.0.0/.github/workflows/publish.yml +265 -0
- {mycli-1.76.0 → mycli-2.0.0}/.github/workflows/typecheck.yml +1 -1
- {mycli-1.76.0 → mycli-2.0.0}/AGENTS.md +0 -1
- {mycli-1.76.0/mycli.egg-info → mycli-2.0.0}/PKG-INFO +70 -49
- {mycli-1.76.0 → mycli-2.0.0}/README.md +69 -42
- {mycli-1.76.0 → mycli-2.0.0}/changelog.md +51 -0
- {mycli-1.76.0 → mycli-2.0.0}/doc/llm.md +27 -27
- {mycli-1.76.0 → mycli-2.0.0}/mycli/TIPS +32 -32
- mycli-2.0.0/mycli/app_state.py +101 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/cli_runner.py +7 -169
- {mycli-1.76.0 → mycli-2.0.0}/mycli/client.py +20 -42
- {mycli-1.76.0 → mycli-2.0.0}/mycli/client_commands.py +7 -7
- {mycli-1.76.0 → mycli-2.0.0}/mycli/client_connection.py +40 -83
- {mycli-1.76.0 → mycli-2.0.0}/mycli/clitoolbar.py +2 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/completion_refresher.py +0 -5
- {mycli-1.76.0 → mycli-2.0.0}/mycli/config.py +0 -82
- {mycli-1.76.0 → mycli-2.0.0}/mycli/main.py +80 -59
- {mycli-1.76.0 → mycli-2.0.0}/mycli/main_modes/batch.py +4 -5
- {mycli-1.76.0 → mycli-2.0.0}/mycli/main_modes/execute.py +16 -2
- {mycli-1.76.0 → mycli-2.0.0}/mycli/main_modes/repl.py +2 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/myclirc +4 -6
- {mycli-1.76.0 → mycli-2.0.0}/mycli/output.py +7 -12
- mycli-2.0.0/mycli/packages/cli_utils.py +33 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/interactive_utils.py +1 -1
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/dbcommands.py +3 -3
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/iocommands.py +15 -15
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/main.py +47 -30
- {mycli-1.76.0 → mycli-2.0.0}/mycli/schema_prefetcher.py +0 -5
- {mycli-1.76.0 → mycli-2.0.0}/mycli/sqlexecute.py +1 -58
- {mycli-1.76.0 → mycli-2.0.0/mycli.egg-info}/PKG-INFO +70 -49
- {mycli-1.76.0 → mycli-2.0.0}/mycli.egg-info/SOURCES.txt +2 -5
- {mycli-1.76.0 → mycli-2.0.0}/mycli.egg-info/requires.txt +0 -7
- mycli-2.0.0/mycli.egg-info/scm_file_list.json +161 -0
- mycli-2.0.0/mycli.egg-info/scm_version.json +8 -0
- {mycli-1.76.0 → mycli-2.0.0}/pyproject.toml +2 -13
- {mycli-1.76.0 → mycli-2.0.0}/test/features/connection.feature +0 -12
- {mycli-1.76.0 → mycli-2.0.0}/test/features/environment.py +4 -16
- mycli-2.0.0/test/features/fixture_data/help_commands.txt +38 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/connection.py +1 -22
- {mycli-1.76.0 → mycli-2.0.0}/test/myclirc +41 -43
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/conftest.py +1 -6
- mycli-2.0.0/test/pytests/test_app_state.py +147 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_checkup.py +24 -5
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_cli_runner.py +89 -16
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_cli_utils.py +11 -1
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_client.py +3 -28
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_client_connection.py +83 -69
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_completion_refresher.py +0 -10
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_config.py +0 -66
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_interactive_utils.py +2 -2
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_main.py +27 -341
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_main_modes_batch.py +4 -4
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_main_modes_execute.py +70 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_main_modes_repl.py +18 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_output.py +9 -13
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_schema_prefetcher.py +0 -5
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_special_main.py +10 -6
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_sqlexecute.py +2 -131
- {mycli-1.76.0 → mycli-2.0.0}/test/utils.py +2 -5
- mycli-1.76.0/.github/workflows/publish.yml +0 -107
- mycli-1.76.0/mycli/app_state.py +0 -107
- mycli-1.76.0/mycli/main_modes/list_ssh_config.py +0 -27
- mycli-1.76.0/mycli/packages/cli_utils.py +0 -21
- mycli-1.76.0/mycli/packages/paramiko_stub/__init__.py +0 -36
- mycli-1.76.0/mycli/packages/ssh_utils.py +0 -27
- mycli-1.76.0/test/features/fixture_data/help_commands.txt +0 -38
- mycli-1.76.0/test/pytests/test_app_state.py +0 -146
- mycli-1.76.0/test/pytests/test_main_modes_list_ssh_config.py +0 -95
- mycli-1.76.0/test/pytests/test_ssh_utils.py +0 -90
- {mycli-1.76.0 → mycli-2.0.0}/.git-blame-ignore-revs +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/.github/dependabot.yml +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/.github/workflows/lint.yml +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/.gitignore +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/AUTHORS.rst +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/CONTRIBUTING.md +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/LICENSE.txt +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/MANIFEST.in +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/SPONSORS.rst +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/doc/key_bindings.rst +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/doc/screenshots/main.gif +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/doc/screenshots/tables.png +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/AUTHORS +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/SPONSORS +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/clibuffer.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/client_query.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/clistyle.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/compat.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/constants.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/key_bindings.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/lexer.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/main_modes/checkup.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/main_modes/list_dsn.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/batch_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/completion_engine.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/filepaths.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/hybrid_redirection.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/key_binding_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/ptoolkit/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/ptoolkit/fzf.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/ptoolkit/history.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/ptoolkit/utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/delimitercommand.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/favoritequeries.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/llm.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/special/utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/sql_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/sqlresult.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/string_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/tabular_output/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/packages/tabular_output/sql_format.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/sqlcompleter.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli/types.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli.egg-info/dependency_links.txt +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli.egg-info/entry_points.txt +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/mycli.egg-info/top_level.txt +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/setup.cfg +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/auto_vertical.feature +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/basic_commands.feature +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/crud_database.feature +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/crud_table.feature +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/db_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/fixture_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/iocommands.feature +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/named_queries.feature +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/specials.feature +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/__init__.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/auto_vertical.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/basic_commands.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/crud_database.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/crud_table.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/iocommands.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/named_queries.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/specials.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/steps/wrappers.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/features/wrappager.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/mylogin.cnf +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_batch_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_clibuffer.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_client_commands.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_client_query.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_clistyle.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_clitoolbar.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_completer_use_switch.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_completion_engine.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_delimitercommand.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_favoritequeries.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_filepaths.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_hybrid_redirection.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_key_binding_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_key_bindings.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_lexer.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_main_modes_list_dsn.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_naive_completion.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_ptoolkit_fzf.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_ptoolkit_history.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_ptoolkit_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_smart_completion_public_schema_only.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_special_dbcommands.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_special_init.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_special_iocommands.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_special_llm.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_special_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_sql_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_sqlcompleter.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_sqlresult.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_string_utils.py +0 -0
- {mycli-1.76.0 → mycli-2.0.0}/test/pytests/test_tabular_output.py +0 -0
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
version: "latest"
|
|
30
30
|
|
|
31
31
|
- name: Set up Python ${{ matrix.python-version }}
|
|
32
|
-
uses: actions/setup-python@
|
|
32
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
33
33
|
with:
|
|
34
34
|
python-version: ${{ matrix.python-version }}
|
|
35
35
|
|
|
@@ -71,7 +71,7 @@ jobs:
|
|
|
71
71
|
version: "latest"
|
|
72
72
|
|
|
73
73
|
- name: Set up Python ${{ matrix.python-version }}
|
|
74
|
-
uses: actions/setup-python@
|
|
74
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
75
75
|
with:
|
|
76
76
|
python-version: ${{ matrix.python-version }}
|
|
77
77
|
|
|
@@ -121,7 +121,7 @@ jobs:
|
|
|
121
121
|
version: 'latest'
|
|
122
122
|
|
|
123
123
|
- name: Set up Python ${{ matrix.python-version }}
|
|
124
|
-
uses: actions/setup-python@
|
|
124
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
125
125
|
with:
|
|
126
126
|
python-version: ${{ matrix.python-version }}
|
|
127
127
|
|
|
@@ -130,7 +130,7 @@ jobs:
|
|
|
130
130
|
run: uv sync --all-extras -p ${{ matrix.python-version }}
|
|
131
131
|
|
|
132
132
|
- name: Set up MySQL
|
|
133
|
-
uses: shogo82148/actions-setup-mysql@
|
|
133
|
+
uses: shogo82148/actions-setup-mysql@076e636c45996ec8cb1a455c65f9f5364aeebd8a # v1.52.1
|
|
134
134
|
with:
|
|
135
135
|
mysql-version: '9.7'
|
|
136
136
|
root-password: root
|
|
@@ -165,7 +165,7 @@ jobs:
|
|
|
165
165
|
run: |
|
|
166
166
|
mkdir -p /root/mycli
|
|
167
167
|
|
|
168
|
-
- uses: ubuntu/wsl/.github/actions/wsl-checkout@
|
|
168
|
+
- uses: ubuntu/wsl/.github/actions/wsl-checkout@f861f1083e518354e4c3637b08c0edfcf8bc3d51
|
|
169
169
|
with:
|
|
170
170
|
distro: Ubuntu-24.04
|
|
171
171
|
working-dir: /root/mycli
|
|
@@ -224,7 +224,7 @@ jobs:
|
|
|
224
224
|
version: "latest"
|
|
225
225
|
|
|
226
226
|
- name: Set up Python ${{ matrix.python-version }}
|
|
227
|
-
uses: actions/setup-python@
|
|
227
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
228
228
|
with:
|
|
229
229
|
python-version: '3.14'
|
|
230
230
|
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
name: Publish Python Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [created]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
docs:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
16
|
+
|
|
17
|
+
- name: Require release changelog form
|
|
18
|
+
run: |
|
|
19
|
+
if grep -q TBD changelog.md; then false; fi
|
|
20
|
+
|
|
21
|
+
tests:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
needs: [docs]
|
|
24
|
+
continue-on-error: true
|
|
25
|
+
|
|
26
|
+
strategy:
|
|
27
|
+
matrix:
|
|
28
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
29
|
+
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
32
|
+
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
33
|
+
with:
|
|
34
|
+
version: "latest"
|
|
35
|
+
|
|
36
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
37
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
38
|
+
with:
|
|
39
|
+
python-version: ${{ matrix.python-version }}
|
|
40
|
+
|
|
41
|
+
- name: Start MySQL
|
|
42
|
+
run: |
|
|
43
|
+
sudo /etc/init.d/mysql start
|
|
44
|
+
|
|
45
|
+
- name: Install dependencies
|
|
46
|
+
run: uv sync --all-extras -p ${{ matrix.python-version }}
|
|
47
|
+
|
|
48
|
+
- name: Wait for MySQL connection
|
|
49
|
+
run: |
|
|
50
|
+
while ! mysqladmin ping --host=localhost --port=3306 --user=root --password=root --silent; do
|
|
51
|
+
sleep 5
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
- name: Pytest / behave
|
|
55
|
+
env:
|
|
56
|
+
PYTEST_PASSWORD: root
|
|
57
|
+
PYTEST_HOST: 127.0.0.1
|
|
58
|
+
run: |
|
|
59
|
+
uv run tox -e py${{ matrix.python-version }}
|
|
60
|
+
|
|
61
|
+
# arguably this should be made identical to CI for PRs
|
|
62
|
+
- name: Run Style Checks
|
|
63
|
+
run: uv run tox -e style
|
|
64
|
+
|
|
65
|
+
tests-macos:
|
|
66
|
+
name: Tests macOS
|
|
67
|
+
runs-on: macos-latest
|
|
68
|
+
|
|
69
|
+
strategy:
|
|
70
|
+
fail-fast: false
|
|
71
|
+
matrix:
|
|
72
|
+
python-version: ["3.14"]
|
|
73
|
+
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
76
|
+
|
|
77
|
+
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
78
|
+
with:
|
|
79
|
+
version: "latest"
|
|
80
|
+
|
|
81
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
82
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
83
|
+
with:
|
|
84
|
+
python-version: ${{ matrix.python-version }}
|
|
85
|
+
|
|
86
|
+
- name: Set up MySQL
|
|
87
|
+
run: |
|
|
88
|
+
brew install mysql
|
|
89
|
+
|
|
90
|
+
- name: Start MySQL
|
|
91
|
+
run: |
|
|
92
|
+
brew services start mysql
|
|
93
|
+
|
|
94
|
+
- name: Install dependencies
|
|
95
|
+
run: uv sync --all-extras -p ${{ matrix.python-version }}
|
|
96
|
+
|
|
97
|
+
- name: Wait for MySQL connection
|
|
98
|
+
run: |
|
|
99
|
+
while ! mysqladmin ping --host=localhost --port=3306 --user=root --silent; do
|
|
100
|
+
sleep 5
|
|
101
|
+
done
|
|
102
|
+
|
|
103
|
+
- name: Set MySQL test credentials
|
|
104
|
+
run: |
|
|
105
|
+
$(brew --prefix mysql)/bin/mysqladmin --host=localhost --port=3306 --user=root password root
|
|
106
|
+
|
|
107
|
+
- name: Pytest / behave
|
|
108
|
+
env:
|
|
109
|
+
PYTEST_PASSWORD: root
|
|
110
|
+
PYTEST_HOST: 127.0.0.1
|
|
111
|
+
TERM: xterm
|
|
112
|
+
run: |
|
|
113
|
+
uv run tox -e py${{ matrix.python-version }}
|
|
114
|
+
|
|
115
|
+
tests-windows:
|
|
116
|
+
name: Tests Windows
|
|
117
|
+
runs-on: windows-latest
|
|
118
|
+
|
|
119
|
+
strategy:
|
|
120
|
+
fail-fast: false
|
|
121
|
+
matrix:
|
|
122
|
+
python-version: ['3.14']
|
|
123
|
+
|
|
124
|
+
steps:
|
|
125
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
126
|
+
|
|
127
|
+
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
128
|
+
with:
|
|
129
|
+
version: 'latest'
|
|
130
|
+
|
|
131
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
132
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
133
|
+
with:
|
|
134
|
+
python-version: ${{ matrix.python-version }}
|
|
135
|
+
|
|
136
|
+
- name: Install dependencies
|
|
137
|
+
shell: cmd
|
|
138
|
+
run: uv sync --all-extras -p ${{ matrix.python-version }}
|
|
139
|
+
|
|
140
|
+
- name: Set up MySQL
|
|
141
|
+
uses: shogo82148/actions-setup-mysql@076e636c45996ec8cb1a455c65f9f5364aeebd8a # v1.52.1
|
|
142
|
+
with:
|
|
143
|
+
mysql-version: '9.7'
|
|
144
|
+
root-password: root
|
|
145
|
+
|
|
146
|
+
- name: Run pytest
|
|
147
|
+
env:
|
|
148
|
+
PYTEST_PASSWORD: root
|
|
149
|
+
PYTEST_HOST: 127.0.0.1
|
|
150
|
+
run: |
|
|
151
|
+
uv run -- coverage run -m pytest
|
|
152
|
+
uv run -- coverage report -m --sort=Miss --skip-covered --skip-empty
|
|
153
|
+
|
|
154
|
+
tests-wsl:
|
|
155
|
+
name: Tests WSL
|
|
156
|
+
runs-on: windows-latest
|
|
157
|
+
|
|
158
|
+
steps:
|
|
159
|
+
- uses: vampire/setup-wsl@d1da7f2c0322a5ee4f24975344f67fc0f5baf364 # v7.0.0
|
|
160
|
+
with:
|
|
161
|
+
distribution: Ubuntu-24.04
|
|
162
|
+
update: 'true'
|
|
163
|
+
additional-packages: |
|
|
164
|
+
curl
|
|
165
|
+
git
|
|
166
|
+
mysql-server
|
|
167
|
+
pkg-config
|
|
168
|
+
build-essential
|
|
169
|
+
python3-pip
|
|
170
|
+
|
|
171
|
+
- name: Create working directory
|
|
172
|
+
shell: wsl-bash {0}
|
|
173
|
+
run: |
|
|
174
|
+
mkdir -p /root/mycli
|
|
175
|
+
|
|
176
|
+
- uses: ubuntu/wsl/.github/actions/wsl-checkout@f861f1083e518354e4c3637b08c0edfcf8bc3d51
|
|
177
|
+
with:
|
|
178
|
+
distro: Ubuntu-24.04
|
|
179
|
+
working-dir: /root/mycli
|
|
180
|
+
|
|
181
|
+
- name: Install uv
|
|
182
|
+
shell: wsl-bash {0}
|
|
183
|
+
run: |
|
|
184
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
185
|
+
env PYTHONPATH=/usr/local/lib/python3.14/site-packages pip install --upgrade --break-system-packages --prefix=/usr uv
|
|
186
|
+
|
|
187
|
+
- name: Install dependencies
|
|
188
|
+
shell: wsl-bash {0}
|
|
189
|
+
run: |
|
|
190
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
191
|
+
cd /root/mycli
|
|
192
|
+
uv sync --all-extras --python 3.14
|
|
193
|
+
|
|
194
|
+
- name: Start MySQL in WSL
|
|
195
|
+
shell: wsl-bash {0}
|
|
196
|
+
run: |
|
|
197
|
+
sudo service mysql start
|
|
198
|
+
|
|
199
|
+
- name: Wait for MySQL connection
|
|
200
|
+
shell: wsl-bash {0}
|
|
201
|
+
run: |
|
|
202
|
+
while ! mysqladmin ping --host=localhost --port=3306 --user=root --silent; do
|
|
203
|
+
sleep 5
|
|
204
|
+
done
|
|
205
|
+
|
|
206
|
+
- name: Set up MySQL
|
|
207
|
+
shell: wsl-bash {0}
|
|
208
|
+
run: |
|
|
209
|
+
mysqladmin -u root password root
|
|
210
|
+
|
|
211
|
+
- name: Run pytest
|
|
212
|
+
shell: wsl-bash {0}
|
|
213
|
+
env:
|
|
214
|
+
PYTEST_HOST: 127.0.0.1
|
|
215
|
+
PYTEST_USER: root
|
|
216
|
+
PYTEST_PASSWORD: root
|
|
217
|
+
run: |
|
|
218
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
219
|
+
cd /root/mycli
|
|
220
|
+
uv run --python 3.14 -- coverage run -m pytest
|
|
221
|
+
uv run --python 3.14 -- coverage report -m --sort=Miss --skip-covered --skip-empty
|
|
222
|
+
|
|
223
|
+
build:
|
|
224
|
+
runs-on: ubuntu-latest
|
|
225
|
+
needs: [tests, tests-macos, tests-windows, tests-wsl]
|
|
226
|
+
|
|
227
|
+
steps:
|
|
228
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
229
|
+
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
|
|
230
|
+
with:
|
|
231
|
+
version: "latest"
|
|
232
|
+
|
|
233
|
+
- name: Set up Python
|
|
234
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
235
|
+
with:
|
|
236
|
+
python-version: '3.14'
|
|
237
|
+
|
|
238
|
+
- name: Install dependencies
|
|
239
|
+
run: uv sync --all-extras -p 3.14
|
|
240
|
+
|
|
241
|
+
- name: Build
|
|
242
|
+
run: uv build
|
|
243
|
+
|
|
244
|
+
- name: Store the distribution packages
|
|
245
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
246
|
+
with:
|
|
247
|
+
name: python-packages
|
|
248
|
+
path: dist/
|
|
249
|
+
|
|
250
|
+
publish:
|
|
251
|
+
name: Publish to PyPI
|
|
252
|
+
runs-on: ubuntu-latest
|
|
253
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
254
|
+
needs: [build]
|
|
255
|
+
environment: release
|
|
256
|
+
permissions:
|
|
257
|
+
id-token: write
|
|
258
|
+
steps:
|
|
259
|
+
- name: Download distribution packages
|
|
260
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
261
|
+
with:
|
|
262
|
+
name: python-packages
|
|
263
|
+
path: dist/
|
|
264
|
+
- name: Publish to PyPI
|
|
265
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
|
|
@@ -21,7 +21,7 @@ jobs:
|
|
|
21
21
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
22
22
|
|
|
23
23
|
- name: Set up Python
|
|
24
|
-
uses: actions/setup-python@
|
|
24
|
+
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
25
25
|
with:
|
|
26
26
|
python-version: '3.14'
|
|
27
27
|
|
|
@@ -39,7 +39,6 @@ A command line client for MySQL with auto-completion and syntax highlighting.
|
|
|
39
39
|
├── mycli/packages/hybrid_redirection.py # implementation of shell-style redirects
|
|
40
40
|
├── mycli/packages/interactive_utils.py # utilities for confirming on destructive statements
|
|
41
41
|
├── mycli/packages/key_binding_utils.py # handlers for key bindings and related special commands
|
|
42
|
-
├── mycli/packages/paramiko_stub/ # stub in case the Paramiko library is not installed
|
|
43
42
|
├── mycli/packages/sql_utils.py # utilities for parsing SQL statements
|
|
44
43
|
├── mycli/packages/ptoolkit/ # extends prompt_toolkit
|
|
45
44
|
├── mycli/packages/special/ # implementation of mycli special commands
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mycli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: CLI for MySQL Database. With auto-completion and syntax highlighting.
|
|
5
5
|
Author: Mycli Core Team
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -31,16 +31,12 @@ Requires-Dist: pyfzf~=0.3.1
|
|
|
31
31
|
Requires-Dist: rapidfuzz~=3.14.3
|
|
32
32
|
Requires-Dist: keyring~=25.7.0
|
|
33
33
|
Requires-Dist: yaspin~=3.4.0
|
|
34
|
-
Provides-Extra: ssh
|
|
35
|
-
Requires-Dist: paramiko~=3.5.1; extra == "ssh"
|
|
36
|
-
Requires-Dist: sshtunnel~=0.4.0; extra == "ssh"
|
|
37
34
|
Provides-Extra: llm
|
|
38
35
|
Requires-Dist: llm~=0.30.0; extra == "llm"
|
|
39
36
|
Requires-Dist: pydantic_core~=2.41.5; extra == "llm"
|
|
40
37
|
Requires-Dist: setuptools==82.*; extra == "llm"
|
|
41
38
|
Requires-Dist: pip==26.*; extra == "llm"
|
|
42
39
|
Provides-Extra: all
|
|
43
|
-
Requires-Dist: mycli[ssh]; extra == "all"
|
|
44
40
|
Requires-Dist: mycli[llm]; extra == "all"
|
|
45
41
|
Provides-Extra: dev
|
|
46
42
|
Requires-Dist: behave~=1.3.3; extra == "dev"
|
|
@@ -52,8 +48,6 @@ Requires-Dist: pytest-cov~=7.0.0; extra == "dev"
|
|
|
52
48
|
Requires-Dist: pytest-random-order~=1.2.0; extra == "dev"
|
|
53
49
|
Requires-Dist: tox~=4.35.0; extra == "dev"
|
|
54
50
|
Requires-Dist: pdbpp~=0.11.7; extra == "dev"
|
|
55
|
-
Requires-Dist: paramiko~=3.5.1; extra == "dev"
|
|
56
|
-
Requires-Dist: sshtunnel~=0.4.0; extra == "dev"
|
|
57
51
|
Requires-Dist: llm~=0.30.0; extra == "dev"
|
|
58
52
|
Requires-Dist: pydantic_core~=2.41.5; extra == "dev"
|
|
59
53
|
Requires-Dist: setuptools==82.*; extra == "dev"
|
|
@@ -65,7 +59,7 @@ Dynamic: license-file
|
|
|
65
59
|
|
|
66
60
|
[](https://github.com/dbcli/mycli/actions?query=workflow%3Amycli)
|
|
67
61
|
|
|
68
|
-
A command line client for MySQL
|
|
62
|
+
A command line client for MySQL with auto-completion and syntax highlighting.
|
|
69
63
|
|
|
70
64
|
Homepage: [https://mycli.net](https://mycli.net)
|
|
71
65
|
Documentation: [https://mycli.net/docs](https://mycli.net/docs)
|
|
@@ -73,31 +67,38 @@ Documentation: [https://mycli.net/docs](https://mycli.net/docs)
|
|
|
73
67
|

|
|
74
68
|

|
|
75
69
|
|
|
76
|
-
Mycli is compatible with MySQL, MariaDB, Percona, TiDB, and Doris.
|
|
70
|
+
Mycli is compatible with MySQL, MariaDB, Percona, TiDB, and Apache Doris.
|
|
77
71
|
|
|
78
72
|
Postgres Equivalent: [https://pgcli.com](https://pgcli.com)
|
|
79
73
|
|
|
74
|
+
Release 2.x
|
|
75
|
+
-----------
|
|
76
|
+
|
|
77
|
+
Release 2.0.0 has [breaking changes](https://github.com/dbcli/mycli/blob/v2.0.0/changelog.md#breaking-changes)!
|
|
78
|
+
|
|
79
|
+
|
|
80
80
|
Quick Start
|
|
81
81
|
-----------
|
|
82
82
|
|
|
83
|
-
If you already know how to install Python packages, then you can install
|
|
83
|
+
If you already know how to install Python packages, then you can install mycli
|
|
84
|
+
via `pip`. This package is always up to date.
|
|
84
85
|
|
|
85
|
-
You might need sudo on Linux.
|
|
86
|
+
You might need `sudo` on Linux.
|
|
86
87
|
|
|
87
88
|
```bash
|
|
88
|
-
pip install
|
|
89
|
+
pip install --upgrade 'mycli[all]'
|
|
89
90
|
```
|
|
90
91
|
|
|
91
|
-
or
|
|
92
|
+
or, only on macOS (`fzf` and `pygments` are optional):
|
|
92
93
|
|
|
93
94
|
```bash
|
|
94
|
-
brew update && brew install mycli
|
|
95
|
+
brew update && brew install mycli fzf pygments
|
|
95
96
|
```
|
|
96
97
|
|
|
97
|
-
or
|
|
98
|
+
or, only on Debian or Ubuntu (`fzf` and `pygments` are optional):
|
|
98
99
|
|
|
99
100
|
```bash
|
|
100
|
-
sudo apt-get install mycli
|
|
101
|
+
sudo apt-get install mycli fzf python3-pygments
|
|
101
102
|
```
|
|
102
103
|
|
|
103
104
|
### Usage
|
|
@@ -111,67 +112,82 @@ mycli --help
|
|
|
111
112
|
Features
|
|
112
113
|
--------
|
|
113
114
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
* Auto-completion as you type for SQL keywords as well as tables, views and
|
|
117
|
-
columns in the database.
|
|
115
|
+
* Auto-completion as you type for SQL keywords as well as tables, views,
|
|
116
|
+
columns, enums, and more!
|
|
118
117
|
* Fuzzy history search using [fzf](https://github.com/junegunn/fzf).
|
|
119
|
-
* Syntax highlighting using Pygments.
|
|
118
|
+
* Syntax highlighting using [Pygments](https://pygments.org/).
|
|
120
119
|
* Smart-completion (enabled by default) will suggest context-sensitive completion.
|
|
121
120
|
- `SELECT * FROM <tab>` will only show table names.
|
|
122
121
|
- `SELECT * FROM users WHERE <tab>` will only show column names.
|
|
123
122
|
* Support for multiline queries.
|
|
124
123
|
* Favorite queries with optional positional parameters. Save a query using
|
|
125
|
-
|
|
124
|
+
`/fs <alias> <query>` and execute it with `/f <alias>`.
|
|
126
125
|
* Timing of sql statements and table rendering.
|
|
127
126
|
* Log every query and its results to a file (disabled by default).
|
|
128
127
|
* Pretty print tabular data (with colors!).
|
|
129
128
|
* Support for SSL connections
|
|
130
129
|
* Shell-style trailing redirects with `$>`, `$>>` and `$|` operators.
|
|
131
|
-
* Support for querying LLMs with context derived from your schema
|
|
130
|
+
* Support for querying LLMs with context derived from your schema using `/llm`.
|
|
132
131
|
* Support for storing passwords in the system keyring.
|
|
133
132
|
|
|
134
|
-
Mycli creates a config file `~/.myclirc` on first run; you can use the
|
|
133
|
+
Mycli creates a config file `~/.myclirc` on the first run; you can use the
|
|
135
134
|
options in that file to configure the above features, and more.
|
|
136
135
|
|
|
137
136
|
Some features are only exposed as [key bindings](doc/key_bindings.rst).
|
|
138
137
|
|
|
139
|
-
|
|
138
|
+
|
|
139
|
+
Implementation
|
|
140
140
|
--------------
|
|
141
141
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
142
|
+
`mycli` is written using [prompt_toolkit](https://github.com/jonathanslenders/python-prompt-toolkit/) and other Python libraries.
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
Contributions
|
|
146
|
+
-------------
|
|
147
|
+
|
|
148
|
+
If you're interested in contributing to this project, first of all we would like
|
|
149
|
+
to extend our heartfelt gratitude. We've written a small doc to describe how to
|
|
150
|
+
get mycli running in a development setup.
|
|
145
151
|
|
|
146
152
|
https://github.com/dbcli/mycli/blob/main/CONTRIBUTING.md
|
|
147
153
|
|
|
148
154
|
|
|
149
155
|
## Additional Install Instructions:
|
|
150
156
|
|
|
151
|
-
These are some alternative ways to install mycli that are not managed by our
|
|
157
|
+
These are some alternative ways to install mycli that are not managed by our
|
|
158
|
+
team but provided by OS package maintainers. OS packages could be somewhat
|
|
159
|
+
out of date.
|
|
160
|
+
|
|
161
|
+
If present, the `fzf` package can be used for fuzzy history search, and
|
|
162
|
+
`pygemtize` can be used for syntax highlighting within the fuzzy history
|
|
163
|
+
search. The `less` package is also expected, but almost always already
|
|
164
|
+
installed.
|
|
152
165
|
|
|
153
166
|
### Arch, Manjaro
|
|
154
167
|
|
|
155
|
-
You can install the mycli package available in the AUR
|
|
168
|
+
You can install the `mycli` package available in the AUR. `fzf` and
|
|
169
|
+
`python-pygments` are optional:
|
|
156
170
|
|
|
157
|
-
```
|
|
158
|
-
yay -S mycli
|
|
171
|
+
```bash
|
|
172
|
+
yay -S mycli fzf python-pygments
|
|
159
173
|
```
|
|
160
174
|
|
|
161
175
|
### Debian, Ubuntu
|
|
162
176
|
|
|
163
|
-
On Debian
|
|
177
|
+
On Debian and Ubuntu distributions, you can easily install the mycli package
|
|
178
|
+
using apt. The `fzf` and `python3-pygments` packages are optional:
|
|
164
179
|
|
|
165
|
-
```
|
|
166
|
-
sudo apt-get install mycli
|
|
180
|
+
```bash
|
|
181
|
+
sudo apt-get install mycli fzf python3-pygments
|
|
167
182
|
```
|
|
168
183
|
|
|
169
184
|
### Fedora
|
|
170
185
|
|
|
171
|
-
Fedora has a package available for mycli
|
|
186
|
+
Fedora has a package available for mycli; install it using dnf. The `fzf` and
|
|
187
|
+
`python-pygments` packages are optional:
|
|
172
188
|
|
|
173
|
-
```
|
|
174
|
-
sudo dnf install mycli
|
|
189
|
+
```bash
|
|
190
|
+
sudo dnf install mycli fzf python-pygments
|
|
175
191
|
```
|
|
176
192
|
|
|
177
193
|
### Windows
|
|
@@ -182,20 +198,22 @@ Install the `less` pager, for example by `scoop install less`.
|
|
|
182
198
|
|
|
183
199
|
Follow the instructions on this blogpost: https://web.archive.org/web/20221006045208/https://www.codewall.co.uk/installing-using-mycli-on-windows/
|
|
184
200
|
|
|
185
|
-
|
|
186
|
-
|
|
201
|
+
The libraries used in mycli are Windows-compatible, but there are known
|
|
202
|
+
limitations according to the test suite. The basics work without any
|
|
203
|
+
modifications, but this configuration isn't supported software at this time.
|
|
187
204
|
|
|
188
|
-
PRs to
|
|
205
|
+
PRs to address shortcomings on Windows would be welcome!
|
|
189
206
|
|
|
190
207
|
#### Option 2: WSL
|
|
191
208
|
|
|
192
|
-
|
|
193
|
-
|
|
209
|
+
Mycli is more compatible with WSL than with native Windows, though still
|
|
210
|
+
not 100% perfect. This is a good option for using mycli on Windows.
|
|
194
211
|
|
|
212
|
+
PRs to complete WSL support would be welcome!
|
|
195
213
|
|
|
196
|
-
### Thanks
|
|
214
|
+
### Thanks
|
|
197
215
|
|
|
198
|
-
This project was funded through kickstarter.
|
|
216
|
+
This project was funded through kickstarter. Our thanks to the [backers](https://mycli.net/sponsors) who supported the project.
|
|
199
217
|
|
|
200
218
|
A special thanks to [Jonathan Slenders](https://twitter.com/jonathan_s) for
|
|
201
219
|
creating [Python Prompt Toolkit](https://github.com/jonathanslenders/python-prompt-toolkit),
|
|
@@ -206,16 +224,19 @@ of this app.
|
|
|
206
224
|
[Click](https://palletsprojects.com/projects/click) is used for command line option parsing
|
|
207
225
|
and printing error messages.
|
|
208
226
|
|
|
209
|
-
Thanks to [PyMysql](https://github.com/PyMySQL/PyMySQL) for a pure
|
|
227
|
+
Thanks to [PyMysql](https://github.com/PyMySQL/PyMySQL) for a pure Python adapter to MySQL databases.
|
|
210
228
|
|
|
211
229
|
|
|
212
230
|
### Compatibility
|
|
213
231
|
|
|
214
|
-
Mycli is tested on macOS
|
|
232
|
+
Mycli is tested on macOS (full), Linux (full), Windows (partial), and WSL
|
|
233
|
+
(partial), and requires Python 3.10 or better.
|
|
215
234
|
|
|
216
|
-
To connect to MySQL versions earlier than 5.5, you may need to set the
|
|
235
|
+
To connect to MySQL versions earlier than 5.5, you may need to set the
|
|
236
|
+
following in `~/.myclirc`:
|
|
217
237
|
|
|
218
|
-
```
|
|
238
|
+
```ini
|
|
239
|
+
[connection]
|
|
219
240
|
# character set for connections without --charset being set at the CLI
|
|
220
241
|
default_character_set = utf8
|
|
221
242
|
```
|