Last active
September 9, 2025 15:59
-
-
Save stuaxo/676d1b67d64ffefff28af70970004d7c to your computer and use it in GitHub Desktop.
sqlcmd
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[build-system] | |
requires = ["hatchling"] | |
build-backend = "hatchling.build" | |
[project] | |
name = "sqlcmdurl" | |
version = "0.1.0" | |
description = "Connect to SQL Server using dj-database-url format" | |
dependencies = [ | |
"dj-database-url", | |
] | |
requires-python = ">=3.8" | |
[project.scripts] | |
sqlcmdurl = "sqlcmdurl:main" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env uv run | |
# /// script | |
# dependencies = [ | |
# "dj-database-url", | |
# ] | |
# /// | |
import sys | |
import os | |
import subprocess | |
import dj_database_url | |
""" | |
sqlcmdurl - Connect to SQL Server using dj-database-url format | |
Usage: | |
sqlcmdurl # Uses DATABASE_URL env var | |
sqlcmdurl "mssqlms://..." # Direct URL | |
sqlcmdurl -e MY_DB_URL # Custom env var (must be exported) | |
sqlcmdurl -- -N -C # Pass extra args to sqlcmd | |
sqlcmdurl -e PROD_DB -- -Q "SELECT @@VERSION" | |
Install: | |
# Direct install | |
curl -o ~/.local/bin/sqlcmdurl https://gist.githubusercontent.com/stuaxo/676d1b67d64ffefff28af70970004d7c/raw/b23ebd79520cccef768edf18bd0e246676a9a2ca/sqlcmdurl.py && chmod +x ~/.local/bin/sqlcmdurl | |
# With uv tool | |
uv tool install https://gist.github.com/stuaxo/676d1b67d64ffefff28af70970004d7c/archive/b23ebd79520cccef768edf18bd0e246676a9a2ca.zip | |
Note: Environment variables must be exported (export MY_VAR=value) to be visible. | |
""" | |
def main(): | |
args = sys.argv[1:] | |
database_url = None | |
sqlcmd_extra_args = [] | |
if '--' in args: | |
separator_index = args.index('--') | |
script_args = args[:separator_index] | |
sqlcmd_extra_args = args[separator_index + 1:] | |
else: | |
script_args = args | |
if len(script_args) >= 2 and script_args[0] == '-e': | |
env_var_name = script_args[1] | |
database_url = os.environ.get(env_var_name) | |
if not database_url: | |
print(f"Error: Environment variable '{env_var_name}' not found.", file=sys.stderr) | |
print("Hint: Make sure to export the variable (export VAR_NAME=value)", file=sys.stderr) | |
sys.exit(1) | |
elif len(script_args) == 1: | |
database_url = script_args[0] | |
else: | |
database_url = os.environ.get('DATABASE_URL') | |
if not database_url: | |
print("Error: No DATABASE_URL provided.", file=sys.stderr) | |
print("Usage: sqlcmdurl [URL] | sqlcmdurl -e ENV_VAR_NAME | set DATABASE_URL env var", file=sys.stderr) | |
print("Additional sqlcmd args can be passed after --", file=sys.stderr) | |
sys.exit(1) | |
try: | |
config = dj_database_url.parse(database_url) | |
cmd = [ | |
'sqlcmd', | |
'-S', f"{config['HOST']},{config['PORT']}", | |
'-d', config['NAME'], | |
'-U', config['USER'], | |
'-P', config['PASSWORD'] | |
] | |
cmd.extend(sqlcmd_extra_args) | |
subprocess.run(cmd) | |
except Exception as e: | |
print(f"Error: {e}", file=sys.stderr) | |
sys.exit(1) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment