Skip to main content

SQL Server Schema Exporter

This project provides a tool to connect to a Microsoft SQL Server database, extract the definitions of stored procedures, views, and tables, and save them into a structured directory layout (sprocs/, views/, tables/) as individual .sql files.

The primary goal is to facilitate version control, code review, and offline browsing of database schema objects. See system_knowledge/project_goal.md for more details.

The project uses a Behavior-Driven Development (BDD) approach with the Behave framework.

Setup and Installation

1. Clone the Repository

git clone <your-repository-url>
cd <your-repository-directory>

2. System Dependencies (ODBC Driver)

This tool uses the pyodbc Python library, which requires a system-level ODBC driver for SQL Server to be installed.

On macOS (using Homebrew):

# Tap the Microsoft repository (if you haven't already)
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release

# Update brew and install the driver (e.g., version 17)
brew update
brew install msodbcsql17
# Note: mssql-tools (sqlcmd, bcp) are optional for this script but often installed alongside
# brew install mssql-tools
  • Verify the driver installation by checking your odbcinst.ini file (e.g., cat $(brew --prefix)/etc/odbcinst.ini). You should see an entry like [ODBC Driver 17 for SQL Server].
  • The Python code in sql_schema_exporter/core.py specifies the driver name in the connection string (DRIVER={ODBC Driver 17 for SQL Server}). Ensure this matches the name registered in your odbcinst.ini.

On other systems (Linux/Windows):

Follow Microsoft's official documentation to install the appropriate ODBC driver for your operating system. Ensure the driver is correctly registered so pyodbc can find it.

3. System Dependencies (Graphviz - for Lineage)

To generate the visual lineage graph image (.png), the Graphviz command-line tools (dot, etc.) must be installed and available in your system's PATH.

On macOS (using Homebrew):

brew install graphviz

On Debian/Ubuntu Linux:

sudo apt update && sudo apt install graphviz

On Windows: Download from the official Graphviz website or use a package manager like Chocolatey (choco install graphviz). Ensure the bin directory of the Graphviz installation is added to your system's PATH environment variable.

Note: If Graphviz is not installed or found, the tool will still generate the .gv (DOT source) file, but it will report an error and skip rendering the image.

4. Python Dependencies

It's recommended to use a Python virtual environment.

# Create a virtual environment (optional but recommended)
python3 -m venv .venv

# Activate the virtual environment BEFORE installing packages
# On macOS/Linux:
source .venv/bin/activate
# On Windows:
# .venv\Scripts\activate

# Install required Python packages inside the active environment
pip install -r features/requirements.txt

The features/requirements.txt file includes:

  • pyodbc: For connecting to the database.
  • behave: For running the BDD tests.
  • graphviz: Python interface for creating Graphviz DOT files and rendering them.

Configuration (for Tests)

The Behave tests (features/steps/sql_schema_exporter_steps.py) require connection details for a test SQL Server database. These are read from environment variables to avoid hardcoding credentials. Set the following variables in your shell before running behave:

  • TEST_DB_SERVER: The server name/address of your test SQL Server instance.
  • TEST_DB_DATABASE: The name of the test database.
  • TEST_DB_USER: (Optional) The username for SQL Server authentication. Leave unset or empty to use Windows/Trusted Authentication.
  • TEST_DB_PASSWORD: (Optional) The password for SQL Server authentication. Leave unset if using Windows/Trusted Authentication.

Example (using SQL Authentication):

export TEST_DB_SERVER="your_test_server.database.windows.net"
export TEST_DB_DATABASE="MyTestDatabase"
export TEST_DB_USER="testuser"
export TEST_DB_PASSWORD="yoursecurepassword"

Example (using Windows/Trusted Authentication):

export TEST_DB_SERVER="localhost\\SQLEXPRESS"
export TEST_DB_DATABASE="MyTestDatabase"
# Leave TEST_DB_USER and TEST_DB_PASSWORD unset

Usage

Running the Exporter Tool

Execute the tool as a Python module from the root directory of the project (the directory containing the sql_schema_exporter folder). This ensures Python correctly recognizes the package structure.

# Make sure you are in the project's root directory
python -m sql_schema_exporter.cli

The tool will prompt you interactively for the connection details (server, database, authentication method, credentials). The extracted schema files will be placed in an output directory named after the database (e.g., YourDatabaseName/). After extracting the schema, the tool will also attempt to query database dependencies and generate a data lineage graph (YourDatabaseName_lineage.gv and YourDatabaseName_lineage.gv.png) in the same output directory.

Running the Tests

Ensure your test database environment variables are set (see Configuration section).

behave

This will run all scenarios defined in the features directory (including schema export and data lineage tests) against your test database. Test output files are temporarily created in features/test_output_data/YourTestDatabaseName/ and cleaned up afterwards.

Metadata

Release files for awali-db-mapping 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for awali-db-mapping 0.0.3
File Size Uploaded Provenance
awali_db_mapping-0.0.3.tar.gz 16.0 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for awali-db-mapping 0.0.3
File Interpreter ABI Platform
awali_db_mapping-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 34.7 kB

Release files / awali_db_mapping-0.0.3.tar.gz

Download URL awali_db_mapping-0.0.3.tar.gz
Size 16.0 kB
Tags Source
SHA-256 checksum
How to use checksums
0f7aa787fe130d0fe99e049c64e8d1d9bb5c41e80a7e076dde3b7590251d2fef
BLAKE2b-256 checksum
How to use checksums
13b100534bc96306b567c260d6952d46a7a87dd20b40bb4c51d0d74bc31eb123
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Release files / awali_db_mapping-0.0.3-py3-none-any.whl

Download URL awali_db_mapping-0.0.3-py3-none-any.whl
Size 18.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ac3527e499ca98bdfa4ecad509a084529d5c0130df6c92e239332bcdbc2b69ce
BLAKE2b-256 checksum
How to use checksums
b7e719ac9d8fad265c49a86814408d061bf192586ca24c9a0dc42c8591a54a8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

Security for awali-db-mapping 0.0.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for awali_db_mapping-0.0.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 5, 2025.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page