dbqm — Database Query Manager
A fullscreen terminal app and a scriptable CLI for running SQL across Oracle, SQL Server, PostgreSQL and MySQL — from one place, with one set of saved connections.
Built with Textual. Credentials are encrypted at rest; nothing is ever written to your shell history.
📖 Full documentation on GitHub
Install
pip install dbqm
Python 3.10+. Database drivers come with it.
Windows on ARM: some drivers have no
win-arm64wheel and are skipped automatically. Use Python AMD64 (it runs under x64 emulation) — see the README.
Oracle connections additionally need the Oracle Instant Client. dbqm can download and install it for you from Settings › Oracle Instant Client.
Use it interactively
dbqm
An eight-tab dashboard (F1–F8): ad-hoc SQL, connections, an object browser,
multi-database comparison, history, saved queries and tools. Fully
keyboard-driven, dark and light themes.
On first launch it creates ~/.dbqm/, generates an encryption key and walks you
through your first connection.
Use it from a script
Every operation below is non-interactive — no prompts, no TTY required, which is what makes dbqm usable from CI or from an AI agent.
# Create a connection. The password is piped, never passed in argv.
echo "s3cret" | dbqm connection add prod --type oracle --mode direct \
--host db.example.com --port 1521 --service ORCL --user admin \
--password-stdin --test
# Run SQL. -f json for a machine, -f raw to pipe a CLOB somewhere else.
dbqm sql "SELECT * FROM pedidos WHERE status = :s" prod -p s=PAGO -f json
# Save a query once, run it with different parameters later.
dbqm run pedidos-em-aberto -p data_inicio=2026-01-01
# Compare the same logical query across environments.
dbqm run-group conciliacao-diaria -p data=2026-01-01
# Get an execution plan in one step (no EXPLAIN PLAN FOR boilerplate).
dbqm sql "SELECT * FROM pedidos WHERE cliente_id = :id" prod --explain -p id=42
# Extract DDL, browse connections, review history.
dbqm ddl PKG_FATURAMENTO prod
dbqm connection list -f json
dbqm history -n 20
--help on any command lists its flags.
What it does
- Saved queries with parameters, organised in folders, with favourites and a DE-PARA column mapping for values that differ between systems.
- Cross-database comparison — run the same logical query against several
connections and get a per-row
OK/DIFF/ABSENTverdict, as a table or an interactive HTML report. - Object browser — tables, views, routines and Oracle packages: columns, primary keys, foreign keys and indexes, without writing catalogue SQL.
- Ad-hoc SQL — SELECT, CTEs, DML, DDL with compilation-error detection, and
anonymous PL/SQL blocks with
DBMS_OUTPUTcaptured and shown. - Execute routines — packages, procedures and functions, with parameter input and output capture.
- Package editor for Oracle PL/SQL, with inline compilation errors.
- Exports — CSV, JSON, TXT, SQL and HTML reports, plus IDE-style execution evidence (the SQL, the connection, the timestamp, the outcome) for an audit trail you can hand to someone else.
- Portable configuration — export and import your connections and queries as
an encrypted
.dbqmbundle.
Security
- Connection passwords are encrypted at rest with Fernet.
- Passwords are read from stdin or an environment variable, never from
argv— they do not reach your shell history or the process table. - Queries use bind variables; SQL identifiers are validated against an allowlist.
- HTML reports escape every user-controlled value.
Links
MIT licensed.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dbqm-1.22.1.tar.gz.
File metadata
- Download URL: dbqm-1.22.1.tar.gz
- Upload date:
- Size: 219.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c037b17ec2ce28283bb63274b6655c448fb80ed81eb183b9ecef479fbf68aea
|
|
| MD5 |
49a7044d820c0716a7e4ee08d122587e
|
|
| BLAKE2b-256 |
5f0233f8ee5f2d18a60f818449ea418e9ddf7563611a29395291e0ec665dd31e
|
File details
Details for the file dbqm-1.22.1-py3-none-any.whl.
File metadata
- Download URL: dbqm-1.22.1-py3-none-any.whl
- Upload date:
- Size: 238.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d062e813ce3ad5d54618018df977d6d20b52f04e9491c9981cd8cfda5746cb8e
|
|
| MD5 |
595eb328968e6e73a3ee3392cba9ca73
|
|
| BLAKE2b-256 |
539a5fe6e33c7b33004294059f860afc03c241257d38bacbb52de250d7303ae5
|