Skip to content

Instantly share code, notes, and snippets.

@stuaxo
Last active September 9, 2025 15:59
Show Gist options
  • Save stuaxo/676d1b67d64ffefff28af70970004d7c to your computer and use it in GitHub Desktop.
Save stuaxo/676d1b67d64ffefff28af70970004d7c to your computer and use it in GitHub Desktop.
sqlcmd
[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"
#!/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