Name | cnbdber JSON |
Version |
0.3.1
JSON |
| download |
home_page | None |
Summary | CNBDBer: Universal DB runner for SQL-like commands across SQLite/MySQL/PostgreSQL/MongoDB |
upload_time | 2025-08-14 00:36:40 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | None |
keywords |
database
cli
sql
sqlite
mysql
postgresql
mongodb
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
CNBDBer
Universal DB runner for SQL-like commands across SQLite, MySQL, PostgreSQL, and MongoDB.
Install
- From PyPI (Python 3.9+):
```bash
pip install cnbdber
# optional extras
pip install 'cnbdber[mysql]'
pip install 'cnbdber[postgres]'
pip install 'cnbdber[mongo]'
pip install 'cnbdber[ssh]' # for SSH tunnel support
```
Notes on SSH dependencies:
- The SSH tunnel feature relies on `sshtunnel` and `paramiko`. Some environments may emit Cryptography deprecation warnings (e.g., TripleDES). As of 0.3.1 these are suppressed internally so CLI and library output stays clean.
- If you pin dependencies yourself, ensure `paramiko<3` when using `sshtunnel`.
- From source (development):
```bash
pip install -e .
```
Config
- App config: `./.configs/cnbdber.config` (auto-created on first run)
- Logger config: `./.configs/cnblogger.config` (auto-created if missing)
- Logs: `./.logs/`
You can override the app config via `CNBDBER_CONFIG=/abs/path/to/cnbdber.config`.
The logger path is read from `cnbdber.config` and passed directly to `CNBLogger`.
See `.config-examples/` in this repo for ready-to-copy examples:
- `sqlite-cnbdber.config`
- `mysql-cnbdber.config`
- `postgres-cnbdber.config`
- `mongo-cnbdber.config`
- `mysql-direct.config`
- `mysql-ssh-same-creds.config`
- `mysql-ssh-different-creds.config`
- `postgres-direct.config`
- `postgres-ssh-same-creds.config`
- `postgres-ssh-different-creds.config`
Usage
Run a one-off command:
```bash
cnbdber -c "SELECT * FROM users LIMIT 5;"
```
Run from a file:
```bash
cnbdber --file ./query.sql
```
Specify a config explicitly:
```bash
cnbdber --config ./my-config.json -c "DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;"
```
- Library usage (import in Python)
Quick one-liner function:
```python
from cnbdber import cnbdber
# Use default/auto-created config
result = cnbdber("SELECT 1;")
print(result or "")
# Or pass a custom config path
result = cnbdber("SELECT * FROM users LIMIT 5;", "./my-config.json")
print(result or "")
```
Or use the config loader and backend helpers for finer control:
```python
from typing import Optional
from cnbdber import load_config, get_logger
from cnbdber.core import create_backend, run_command, create_backend_context
cfg = load_config() # or load_config("./my-config.json")
logger = get_logger(cfg.logger_config_path, inline_config=cfg.logger)
with create_backend_context(cfg.target, logger) as backend:
# DDL/DML: returns None on success
ddl_result: Optional[str] = run_command(backend, "CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY, name TEXT);")
insert_result: Optional[str] = run_command(backend, "INSERT INTO items(name) VALUES ('alpha');")
# SELECT: returns tab-separated text (with header when available)
select_result: Optional[str] = run_command(backend, "SELECT id, name FROM items ORDER BY id;")
print(select_result or "")
```
To target MySQL/PostgreSQL/MongoDB, set `cfg.target` via `cnbdber.config` (see examples below) or construct a dict at runtime and pass it to `create_backend`.
- SQL backends (SQLite/MySQL/PostgreSQL): raw SQL is executed as-is.
- MongoDB: a minimal SQL-to-Mongo translation is supported for simple `SELECT/INSERT/UPDATE/DELETE` with equality-only `WHERE` clauses.
Example cnbdber.config
```json
{
"logger_config_path": "./.configs/cnblogger.config",
"target": {
"type": "sqlite",
"sqlite_path": "./example.db"
}
}
```
Switch to MySQL:
```json
{
"logger_config_path": "./.configs/cnblogger.config",
"target": {
"type": "mysql",
"host": "127.0.0.1",
"port": 3306,
"user": "root",
"password": "",
"password_file": "",
"database": "test"
}
}
```
SSH tunnel (optional) for MySQL/PostgreSQL:
```json
{
"logger_config_path": "./.configs/cnblogger.config",
"target": {
"type": "postgres",
"host": "db.internal",
"port": 5432,
"user": "postgres",
"password": "",
"password_file": "~/.secrets/db.pass",
"database": "app",
"sslmode": "require",
"ssh": {
"enabled": true,
"host": "bastion.example.com",
"port": 22,
"user": "ec2-user",
"pkey_path": "~/.ssh/id_rsa",
"pkey_password": "",
"local_bind_host": "127.0.0.1",
"local_bind_port": 0,
"remote_host": "db.internal",
"remote_port": 5432
}
}
}
```
Notes:
- When `password_file` is provided, it will be read and used instead of `password`.
- Using SSH requires extra `cnbdber[ssh]`.
- Warnings from `paramiko`/`cryptography` are suppressed beginning with 0.3.1. If you prefer to manage this yourself, remove the suppression and pin compatible versions instead.
- Always prefer the context manager (`create_backend_context`) to ensure SSH tunnels (if any) are cleaned up automatically.
License
MIT
Raw data
{
"_id": null,
"home_page": null,
"name": "cnbdber",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "database, cli, sql, sqlite, mysql, postgresql, mongodb",
"author": null,
"author_email": "\"Mr. Clark\" <geoff@cnb.llc>",
"download_url": "https://files.pythonhosted.org/packages/c4/86/3a5baedc95697f104512e2aa8fda41ccd602955dbdfc1be12b09e9f4d0d3/cnbdber-0.3.1.tar.gz",
"platform": null,
"description": "CNBDBer\n\nUniversal DB runner for SQL-like commands across SQLite, MySQL, PostgreSQL, and MongoDB.\n\nInstall\n\n- From PyPI (Python 3.9+):\n```bash\npip install cnbdber\n# optional extras\npip install 'cnbdber[mysql]'\npip install 'cnbdber[postgres]'\npip install 'cnbdber[mongo]'\npip install 'cnbdber[ssh]' # for SSH tunnel support\n```\nNotes on SSH dependencies:\n\n- The SSH tunnel feature relies on `sshtunnel` and `paramiko`. Some environments may emit Cryptography deprecation warnings (e.g., TripleDES). As of 0.3.1 these are suppressed internally so CLI and library output stays clean.\n- If you pin dependencies yourself, ensure `paramiko<3` when using `sshtunnel`.\n- From source (development):\n```bash\npip install -e .\n```\n\nConfig\n\n- App config: `./.configs/cnbdber.config` (auto-created on first run)\n- Logger config: `./.configs/cnblogger.config` (auto-created if missing)\n- Logs: `./.logs/`\n\nYou can override the app config via `CNBDBER_CONFIG=/abs/path/to/cnbdber.config`.\nThe logger path is read from `cnbdber.config` and passed directly to `CNBLogger`.\n\nSee `.config-examples/` in this repo for ready-to-copy examples:\n\n- `sqlite-cnbdber.config`\n- `mysql-cnbdber.config`\n- `postgres-cnbdber.config`\n- `mongo-cnbdber.config`\n- `mysql-direct.config`\n- `mysql-ssh-same-creds.config`\n- `mysql-ssh-different-creds.config`\n- `postgres-direct.config`\n- `postgres-ssh-same-creds.config`\n- `postgres-ssh-different-creds.config`\n\nUsage\n\nRun a one-off command:\n```bash\ncnbdber -c \"SELECT * FROM users LIMIT 5;\"\n```\nRun from a file:\n```bash\ncnbdber --file ./query.sql\n```\nSpecify a config explicitly:\n```bash\ncnbdber --config ./my-config.json -c \"DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;\"\n```\n\n- Library usage (import in Python)\n\nQuick one-liner function:\n\n```python\nfrom cnbdber import cnbdber\n\n# Use default/auto-created config\nresult = cnbdber(\"SELECT 1;\")\nprint(result or \"\")\n\n# Or pass a custom config path\nresult = cnbdber(\"SELECT * FROM users LIMIT 5;\", \"./my-config.json\")\nprint(result or \"\")\n```\n\nOr use the config loader and backend helpers for finer control:\n\n```python\nfrom typing import Optional\nfrom cnbdber import load_config, get_logger\nfrom cnbdber.core import create_backend, run_command, create_backend_context\n\ncfg = load_config() # or load_config(\"./my-config.json\")\nlogger = get_logger(cfg.logger_config_path, inline_config=cfg.logger)\n\nwith create_backend_context(cfg.target, logger) as backend:\n # DDL/DML: returns None on success\n ddl_result: Optional[str] = run_command(backend, \"CREATE TABLE IF NOT EXISTS items(id INTEGER PRIMARY KEY, name TEXT);\")\n\n insert_result: Optional[str] = run_command(backend, \"INSERT INTO items(name) VALUES ('alpha');\")\n\n # SELECT: returns tab-separated text (with header when available)\n select_result: Optional[str] = run_command(backend, \"SELECT id, name FROM items ORDER BY id;\")\n print(select_result or \"\")\n```\n\nTo target MySQL/PostgreSQL/MongoDB, set `cfg.target` via `cnbdber.config` (see examples below) or construct a dict at runtime and pass it to `create_backend`.\n\n- SQL backends (SQLite/MySQL/PostgreSQL): raw SQL is executed as-is.\n- MongoDB: a minimal SQL-to-Mongo translation is supported for simple `SELECT/INSERT/UPDATE/DELETE` with equality-only `WHERE` clauses.\n\nExample cnbdber.config\n\n```json\n{\n \"logger_config_path\": \"./.configs/cnblogger.config\",\n \"target\": {\n \"type\": \"sqlite\",\n \"sqlite_path\": \"./example.db\"\n }\n}\n```\n\nSwitch to MySQL:\n```json\n{\n \"logger_config_path\": \"./.configs/cnblogger.config\",\n \"target\": {\n \"type\": \"mysql\",\n \"host\": \"127.0.0.1\",\n \"port\": 3306,\n \"user\": \"root\",\n \"password\": \"\", \n \"password_file\": \"\", \n \"database\": \"test\"\n }\n}\n```\n\nSSH tunnel (optional) for MySQL/PostgreSQL:\n```json\n{\n \"logger_config_path\": \"./.configs/cnblogger.config\",\n \"target\": {\n \"type\": \"postgres\",\n \"host\": \"db.internal\",\n \"port\": 5432,\n \"user\": \"postgres\",\n \"password\": \"\",\n \"password_file\": \"~/.secrets/db.pass\",\n \"database\": \"app\",\n \"sslmode\": \"require\",\n \"ssh\": {\n \"enabled\": true,\n \"host\": \"bastion.example.com\",\n \"port\": 22,\n \"user\": \"ec2-user\",\n \"pkey_path\": \"~/.ssh/id_rsa\",\n \"pkey_password\": \"\",\n \"local_bind_host\": \"127.0.0.1\",\n \"local_bind_port\": 0,\n \"remote_host\": \"db.internal\",\n \"remote_port\": 5432\n }\n }\n}\n```\n\nNotes:\n- When `password_file` is provided, it will be read and used instead of `password`.\n- Using SSH requires extra `cnbdber[ssh]`.\n- Warnings from `paramiko`/`cryptography` are suppressed beginning with 0.3.1. If you prefer to manage this yourself, remove the suppression and pin compatible versions instead.\n- Always prefer the context manager (`create_backend_context`) to ensure SSH tunnels (if any) are cleaned up automatically.\n\nLicense\n\nMIT\n\n\n",
"bugtrack_url": null,
"license": null,
"summary": "CNBDBer: Universal DB runner for SQL-like commands across SQLite/MySQL/PostgreSQL/MongoDB",
"version": "0.3.1",
"project_urls": {
"Homepage": "https://github.com/AznIronMan/cnbdber",
"Repository": "https://github.com/AznIronMan/cnbdber.git"
},
"split_keywords": [
"database",
" cli",
" sql",
" sqlite",
" mysql",
" postgresql",
" mongodb"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "85f78a316f9a8463dd85c6df7dcba34152b7131b74897d97578683b662b188ab",
"md5": "ad82f0cde8fdf59339a6b542d4838a6b",
"sha256": "66e62f21fde1b1d866dd743e292689c29f5ea21258d93b324f0d0ed1e1112dd7"
},
"downloads": -1,
"filename": "cnbdber-0.3.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ad82f0cde8fdf59339a6b542d4838a6b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 12145,
"upload_time": "2025-08-14T00:36:38",
"upload_time_iso_8601": "2025-08-14T00:36:38.001879Z",
"url": "https://files.pythonhosted.org/packages/85/f7/8a316f9a8463dd85c6df7dcba34152b7131b74897d97578683b662b188ab/cnbdber-0.3.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c4863a5baedc95697f104512e2aa8fda41ccd602955dbdfc1be12b09e9f4d0d3",
"md5": "af18d56b43a98dfb1af43977b6e22295",
"sha256": "51345133eaef33a8e04e10c17f201692e71c940aab61cab390fb9376384cd579"
},
"downloads": -1,
"filename": "cnbdber-0.3.1.tar.gz",
"has_sig": false,
"md5_digest": "af18d56b43a98dfb1af43977b6e22295",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 12285,
"upload_time": "2025-08-14T00:36:40",
"upload_time_iso_8601": "2025-08-14T00:36:40.321728Z",
"url": "https://files.pythonhosted.org/packages/c4/86/3a5baedc95697f104512e2aa8fda41ccd602955dbdfc1be12b09e9f4d0d3/cnbdber-0.3.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-14 00:36:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "AznIronMan",
"github_project": "cnbdber",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "cnbdber"
}