Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato příručka popisuje nastavení prostředí pro vývojáře Django, kteří pracují s back-endem mssql-django napříč Windows, Linuxem, macOS, kontejnery Dockeru, devcontainery a kanály CI.
Prerequisites
- Python 3.8 nebo novější (Django 6.0 vyžaduje Python 3.12 a novější verze)
- Docker Desktop (pro vývoj založený na kontejnerech)
- Microsoft ovladač ODBC 17 nebo 18 pro SQL Server. Viz Stažení ovladače ODBC pro SQL Server.
Místní SQL Server s sqlcmd (doporučeno)
Nástroj sqlcmd (Go) může v jednom příkazu vytvořit kontejner SQL Server. Zpracovává vyžádání image Dockeru, generování hesla, přiřazení portu a kontext připojení automaticky:
sqlcmd create mssql --accept-eula
Vytvoření kontejneru s připojenou ukázkovou databází:
sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
Po vytvoření uloží kontext připojení, sqlcmd abyste se mohli dotazovat okamžitě:
sqlcmd query "SELECT @@VERSION"
Nakonfigurujte Django tak, aby se připojovalo pomocí údajů o připojení, které sqlcmd vypsal při vytvoření. Použijte sqlcmd config view k jejich pozdějšímu načtení:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "master",
"USER": "sa",
"PASSWORD": "<password from sqlcmd output>",
"HOST": "localhost",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "TrustServerCertificate=yes",
},
},
}
Až budete hotovi, zastavte nebo odstraňte kontejner:
sqlcmd stop
sqlcmd delete
Tip
Spuštěním příkazu sqlcmd create mssql --user-database mydb vytvořte kontejner s prázdnou uživatelskou databází připravenou pro vývoj.
Místní SQL Server v Visual Studio Code
Rozšíření MSSQL pro Visual Studio Code může vytvářet místní kontejnery SQL Server přímo z editoru:
- Otevřete zobrazení SQL Server na panelu aktivit.
- Vyberte Přidat připojení>Vytvořit místní SQL Server (nebo použijte Paletu příkazů: MS SQL: Vytvořit místní SQL Server).
- Zvolte verzi SQL Server a přijměte smlouvu EULA.
- Rozšíření načte image kontejneru, vygeneruje heslo a automaticky přidá profil připojení.
Po spuštění kontejneru můžete procházet databáze, spouštět dotazy a spravovat objekty v Visual Studio Code před přepnutím na kód Django.
Místní SQL Server s Dockerem
Pokud dáváte přednost přímé správě kontejnerů, oficiální image kontejneru SQL Server funguje se dvěma proměnnými prostředí:
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=YourStr0ngP@ssword" \
-p 1433:1433 --name sql1 \
-d mcr.microsoft.com/mssql/server:2022-latest
Important
Používá se MSSQL_SA_PASSWORD pro kontejnery SQL Server. Starší SA_PASSWORD proměnná je zastaralá. Heslo musí splňovat požadavky na složitost SQL Server: nejméně 8 znaků s velkými písmeny, malými písmeny, číslicemi a speciálními znaky.
Počkejte několik sekund, než se kontejner spustí, a pak spusťte migrace:
python manage.py migrate
python manage.py createsuperuser
Dockerfile pro aplikace Django
Vytvořte minimální soubor Dockerfile pro aplikaci Django, která se připojuje k SQL Server. Ovladač ODBC je klíčovou závislostí, která není součástí základní image Python:
FROM python:3-slim
# Install ODBC Driver 18 for SQL Server
RUN apt-get update && \
apt-get install -y --no-install-recommends curl gnupg2 && \
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | \
gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg && \
echo "deb [signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" > \
/etc/apt/sources.list.d/mssql-release.list && \
apt-get update && \
ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql18 unixodbc-dev && \
apt-get purge -y curl gnupg2 && \
apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# Collect static files
RUN python manage.py collectstatic --noinput
EXPOSE 8000
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
Vaše requirements.txt:
django>=5.2
mssql-django>=1.5
gunicorn>=22.0
Sestavení a spuštění:
docker build -t mydjango .
docker run -e DB_HOST=host.docker.internal -e DB_NAME=mydb \
-e DB_USER=<your-username> -e DB_PASSWORD=<your-password> \
-p 8000:8000 mydjango
Note
Použijte v Docker Desktopu (Windows a macOS) host.docker.internal pro přístup k serveru SQL Server na hostitelském počítači. V Linuxu použijte --network host místo toho.
Nastavení devcontaineru
Vytvořte .devcontainer/devcontainer.json pro Visual Studio Code se službou SQL Server jako sidecar:
{
"name": "Django + SQL Server",
"image": "mcr.microsoft.com/devcontainers/python:3",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
},
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"postCreateCommand": "bash .devcontainer/post-create.sh",
"forwardPorts": [1433, 8000],
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-mssql.mssql"
]
}
}
}
Tento devcontainer nainstaluje ovladač ODBC a Python závislostí, ale nezahrnuje instanci SQL Server. Spusťte ho uvnitř devcontaineru pomocí sqlcmd create mssql --accept-eula (protože je k dispozici Docker-in-Docker) nebo použijte přístup Docker Compose pro integrovanou službu SQL Server.
Vytvořte .devcontainer/post-create.sh pro instalaci ovladače ODBC a Python závislostí:
#!/bin/bash
set -e
# Install ODBC Driver 18
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
echo "deb [signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" | \
sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev
pip install -r requirements.txt
Zahrnutí SQL Server do Docker Compose
Pokud chcete do devcontaineru zahrnout SQL Server jako službu, použijte Docker Compose:
.devcontainer/docker-compose.yml:
services:
app:
image: mcr.microsoft.com/devcontainers/python:3
volumes:
- ..:/workspace:cached
command: sleep infinity
depends_on:
- db
db:
image: mcr.microsoft.com/mssql/server:2022-latest
environment:
ACCEPT_EULA: "Y"
MSSQL_SA_PASSWORD: "YourStr0ngP@ssword"
ports:
- "1433:1433"
.devcontainer/devcontainer.json (Compose version):
{
"name": "Django + SQL Server",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspace",
"postCreateCommand": "bash .devcontainer/post-create.sh",
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-mssql.mssql"
]
}
}
}
Připojte Django ke službě SQL Server podle názvu:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "mydb",
"USER": "sa",
"PASSWORD": "<password>",
"HOST": "db",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "TrustServerCertificate=yes",
},
},
}
Ověřování pro vývoj
Zvolte přístup ověřování na základě toho, kde je vaše aplikace spuštěná a kde je databáze hostovaná.
Místní vývoj proti Azure SQL
Pro místní vývoj pro Azure SQL použijte buď Authentication=ActiveDirectoryDefault v OPTIONS["extra_params"] (s verzí mssql-django 1.7.3 a novější a s kompatibilním ovladačem Microsoft ODBC) nebo nastavení TOKEN s DefaultAzureCredential.
DefaultAzureCredential automaticky naváže na vaši az login relaci:
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://database.windows.net/.default").token
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "mydb",
"HOST": "myserver.database.windows.net",
"PORT": "1433",
"TOKEN": token,
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Kompletní matici metod ověřování a upozornění najdete v tématu ověřování Microsoft Entra pomocí mssql-django.
Vývoj kontejnerů pro Azure SQL
Pro kontejnery spuštěné v Azure použijte nastavení TOKEN společně s ManagedIdentityCredential k explicitnímu získání přístupového tokenu Microsoft Entra:
from azure.identity import ManagedIdentityCredential
credential = ManagedIdentityCredential()
token = credential.get_token("https://database.windows.net/.default").token
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "mydb",
"HOST": "myserver.database.windows.net",
"PORT": "1433",
"TOKEN": token,
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Úplný seznam metod ověřování najdete v tématu Microsoft Entra ověřování pomocí mssql-django.
Nastavení CI pipeline
Spusťte testovací sadu Django v CI pipeline s kontejnerem služby SQL Server.
GitHub Actions
name: Django Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2022-latest
env:
ACCEPT_EULA: Y
MSSQL_SA_PASSWORD: YourStr0ngP@ssword
ports:
- 1433:1433
options: >-
--health-cmd "/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P \"$$MSSQL_SA_PASSWORD\" -C -Q 'SELECT 1'"
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install ODBC Driver
run: |
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
echo "deb [signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/ubuntu/$(lsb_release -rs)/prod $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev
- name: Install dependencies
run: pip install -r requirements.txt
- name: Run tests
env:
DB_HOST: localhost
DB_NAME: master
DB_USER: <username>
DB_PASSWORD: <password>
run: python manage.py test
Tip
U sdílených kanálů nahraďte inline zástupné heslo šifrovaným tajným údajem (${{ secrets.SQL_PWD }}) a připněte image služby SQL Server ke konkrétnímu digestu.
Azure Pipelines
trigger:
- main
resources:
containers:
- container: sqlserver
image: mcr.microsoft.com/mssql/server:2022-latest
env:
ACCEPT_EULA: Y
MSSQL_SA_PASSWORD: YourStr0ngP@ssword
ports:
- 1433:1433
pool:
vmImage: ubuntu-latest
services:
sqlserver: sqlserver
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: "3.x"
- script: |
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg
echo "deb [signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/ubuntu/$(lsb_release -rs)/prod $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 unixodbc-dev
pip install -r requirements.txt
displayName: Install dependencies
- script: python manage.py test
displayName: Run tests
env:
DB_HOST: localhost
DB_NAME: master
DB_USER: <username>
DB_PASSWORD: <password>
Settings.py založené na prostředí
Nakonfigurujte settings.py, aby načítal přihlašovací údaje k databázi z proměnných prostředí. Tato jediná konfigurace funguje napříč místním vývojem, Dockerem a CI:
import os
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": os.environ.get("DB_NAME", "mydb"),
"USER": os.environ.get("DB_USER", ""),
"PASSWORD": os.environ.get("DB_PASSWORD", ""),
"HOST": os.environ.get("DB_HOST", "localhost"),
"PORT": os.environ.get("DB_PORT", "1433"),
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": os.environ.get("DB_EXTRA_PARAMS", "TrustServerCertificate=yes"),
},
},
}
Uložení přihlašovacích údajů do .env souboru pro místní vývoj (přidat .env do .gitignore):
DB_HOST=localhost
DB_NAME=mydb
DB_USER=<username>
DB_PASSWORD=<password>
Načtení proměnných prostředí pomocí django-environ nebo python-dotenv:
pip install django-environ
import environ
env = environ.Env()
environ.Env.read_env() # Reads .env file
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": env("DB_NAME"),
"USER": env("DB_USER", default=""),
"PASSWORD": env("DB_PASSWORD", default=""),
"HOST": env("DB_HOST", default="localhost"),
"PORT": env("DB_PORT", default="1433"),
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Caution
Nikdy neukládejte soubory .env do správy zdrojových kódů. Přidejte .env do .gitignore souboru.
Řešení běžných problémů s kontejnery
| Symptom | Příčina | Opravit |
|---|---|---|
Can't open lib 'ODBC Driver 18 for SQL Server' |
Ovladač ODBC není v kontejneru nainstalován. | Nainstalujte msodbcsql18 do Dockerfilu nebo do post-create skriptu. |
| Připojení odmítnuto na portu 1433 | SQL Server kontejner není připravený. | Přidejte kontrolu stavu nebo počkejte, než se služba spustí. |
Login failed for user '<username>' |
Přihlašovací údaje jsou nesprávné nebo heslo nesplňuje požadavky na složitost. | Použijte správné přihlášení SQL pro váš kontejner a ujistěte se, že heslo splňuje požadavky na složitost. |
Cannot open database |
Databáze ještě neexistuje. | Vytvořte databázi před spuštěním migratenebo použijte master pro počáteční instalaci. |
| Pomalé první připojení v kontejneru | Překlad DNS nebo spouštění řetězce přihlašovacích údajů. | Pro místní SQL Server použijte localhost místo názvu hostitele. |
SSL Provider: [error:0A000086] |
Selhání ověření certifikátu TLS u certifikátu podepsaného sám sebou | Přidejte TrustServerCertificate=yes do extra_params pouze pro vývoj. |