Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az útmutató a Windows, Linux, macOS, Docker-tárolók, devcontainerek és CI-folyamatok háttérrendszerével mssql-django dolgozó Django-fejlesztők környezetbeállításait ismerteti.
Prerequisites
- Python 3.8-at vagy újabb verziót (a Django 6.0 Python 3.12-s és újabb verzióit igényli)
- Docker Desktop (tárolóalapú fejlesztéshez)
- Microsoft ODBC Driver 17 vagy 18 SQL Serverhez. Lásd: Az SQL Serverhez készült ODBC-illesztőprogram letöltése.
Helyi SQL Server sqlcmd használatával (ajánlott)
Az sqlcmd (Go) segédprogram egyetlen parancsban hozhat létre SQL Server tárolót. Automatikusan kezeli a Docker-rendszerkép lekérését, a jelszógenerálást, a porthozzárendelést és a kapcsolati környezetet:
sqlcmd create mssql --accept-eula
Tároló létrehozása már csatolt mintaadatbázissal:
sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
A létrehozás után tárolja a kapcsolati környezetet, sqlcmd hogy azonnal lekérdezhesse:
sqlcmd query "SELECT @@VERSION"
Konfigurálja a Django-t a csatlakozáshoz a létrehozáskor kinyomtatott kapcsolati adatokkal sqlcmd . Használja a(z) sqlcmd config view elemet a későbbi lekéréshez:
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",
},
},
}
Amikor végzett, állítsa le vagy törölje a konténert:
sqlcmd stop
sqlcmd delete
Tip
Üres felhasználói adatbázissal rendelkező, fejlesztésre kész konténer létrehozásához futtassa a(z) sqlcmd create mssql --user-database mydb parancsot.
Helyi SQL Server a Visual Studio Code-ban
A Visual Studio Code MSSQL-bővítménye közvetlenül a szerkesztőből hozhat létre helyi SQL Server tárolókat:
- Nyissa meg a SQL Server nézetet a tevékenységsávon.
- Válassza a Kapcsolat hozzáadása>Helyi SQL Server létrehozása lehetőséget (vagy használja a Parancspalettát: MS SQL: Helyi SQL Server létrehozása).
- Válassza ki a SQL Server verziót, és fogadja el az EULA-t.
- A bővítmény lekéri a tárolórendszerképet, létrehoz egy jelszót, és automatikusan hozzáad egy kapcsolatprofilt.
A tároló futtatása után böngészhet az adatbázisok között, lekérdezéseket futtathat, és kezelheti az objektumokat Visual Studio Code, mielőtt a Django-kódra váltana.
Helyi SQL Server a Dockerrel
Ha inkább közvetlenül szeretné kezelni a tárolókat, a hivatalos SQL Server tárolórendszerkép két környezeti változóval működik:
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
SQL Server tárolókhoz használhatóMSSQL_SA_PASSWORD. A régebbi SA_PASSWORD változó elavult. A jelszónak meg kell felelnie SQL Server összetettségi követelményeknek: legalább 8 karakter, nagybetűvel, kisbetűvel, számjegyekkel és speciális karakterekkel.
Várjon néhány másodpercet, amíg a tároló elindul, majd futtassa az áttelepítéseket:
python manage.py migrate
python manage.py createsuperuser
Dockerfile Django-alkalmazásokhoz
Hozzon létre egy minimális Dockerfile-fájlt egy Django-alkalmazáshoz, amely SQL Server csatlakozik. Az ODBC-illesztő az a kulcsfüggőség, amely nem tartozik az Python alaprendszerképhez:
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"]
Az Ön requirements.txt:
django>=5.2
mssql-django>=1.5
gunicorn>=22.0
Építés és futtatás:
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
A Docker Desktopben (Windows és macOS rendszeren) a host.docker.internal használatával érheti el a gazdagépen futó SQL Servert. Linuxon használja --network host inkább.
Devcontainer beállítása
Hozzon létre egy .devcontainer/devcontainer.json a Visual Studio Code-hoz, amely sidecar szolgáltatásként tartalmazza az SQL Servert:
{
"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"
]
}
}
}
Ez a devcontainer telepíti az ODBC-illesztőprogramot és Python függőségeket, de nem tartalmaz SQL Server-példányt. Kezdjen egyet a devcontainerben sqlcmd create mssql --accept-eula (mivel a Docker-in-Docker elérhető), vagy használja a Docker Compose megközelítést egy beépített SQL Server szolgáltatáshoz.
Az ODBC-illesztőprogram és a Python-függőségek telepítéséhez hozza létre a .devcontainer/post-create.sh-t:
#!/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
SQL Server hozzáadása a Docker Compose használatával
Ha szolgáltatásként SQL Server szeretne szerepelni a devcontainerben, használja a Docker Compose-t:
.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 verzió):
{
"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"
]
}
}
}
Csatlakoztassa a Django-t a SQL Server szolgáltatáshoz név szerint:
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",
},
},
}
Hitelesítés fejlesztéshez
Válasszon hitelesítési módszert az alkalmazás futási helye és az adatbázis üzemeltetése alapján.
Helyi fejlesztés Azure SQL használatával
Az Azure SQL-hez kapcsolódó helyi fejlesztéshez használja vagy a Authentication=ActiveDirectoryDefault elemet a OPTIONS["extra_params"] környezetben (az 1.7.3-as és újabb mssql-django verziókkal, valamint egy kompatibilis Microsoft ODBC-illesztőprogrammal), vagy a TOKEN beállítást a DefaultAzureCredential használatával.
DefaultAzureCredential automatikusan folytatja az Ön az login munkamenetét:
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",
},
},
}
A teljes hitelesítési mátrixot és figyelmeztetéseket az mssql-django Microsoft Entra hitelesítésével kapcsolatban talál.
Konténerfejlesztés Azure SQL-hez
Az Azure-ban futó tárolók esetében a ManagedIdentityCredential használatával explicit módon kérje le a Microsoft Entra hozzáférési jogkivonatot a TOKEN beállítással:
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",
},
},
}
A hitelesítési módszerek teljes listáját az mssql-django Microsoft Entra hitelesítésével kapcsolatban találja.
CI-folyamat konfigurálása
Futtassa a Django-tesztcsomagot egy SQL Server szolgáltatástárolón a CI-folyamatban.
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
Megosztott folyamatok esetén cserélje le a beágyazott helyőrző jelszót egy titkosított titkos kódra (${{ secrets.SQL_PWD }}), és rögzítse a SQL Server szolgáltatás rendszerképét egy kivonatba.
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>
Környezeti alapú settings.py
Konfigurálja settings.py az adatbázis hitelesítő adatainak beolvasását a környezeti változókból. Ez az egyetlen konfiguráció a helyi fejlesztés, a Docker és a CI területén működik:
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"),
},
},
}
Hitelesítő adatok tárolása egy .env fájlban helyi fejlesztéshez (hozzáadás .env a következőhöz .gitignore):
DB_HOST=localhost
DB_NAME=mydb
DB_USER=<username>
DB_PASSWORD=<password>
Környezeti változók betöltése django-environ vagy python-dotenv használatával:
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
Soha ne véglegesítse .env a fájlokat a forrásvezérlőben. Adja hozzá a .env elemet a .gitignore fájljához.
A tárolóval kapcsolatos gyakori problémák elhárítása
| Hibajelenség | A probléma oka | Kijavítás |
|---|---|---|
Can't open lib 'ODBC Driver 18 for SQL Server' |
Az ODBC-illesztő nincs telepítve a tárolóban. | Telepítse a(z) msodbcsql18-t a Dockerfile-ban vagy a létrehozás utáni szkriptben. |
| A kapcsolat megtagadva az 1433-as porton | SQL Server tároló nem áll készen. | Adjon hozzá állapotellenőrzést, vagy várja meg, amíg a szolgáltatás elindul. |
Login failed for user '<username>' |
A hitelesítő adatok helytelenek, vagy a jelszó nem felel meg az összetettségi követelményeknek. | Használja a megfelelő SQL-bejelentkezést a tárolóhoz, és győződjön meg arról, hogy a jelszó megfelel az összetettségi követelményeknek. |
Cannot open database |
Az adatbázis még nem létezik. | Az adatbázist a migrate futtatása előtt hozza létre, vagy a kezdeti beállításhoz használja a master elemet. |
| Lassú első kapcsolat a tárolóban | DNS-feloldás vagy hitelesítőadat-lánc indítása. | Helyi SQL Server esetén a gazdagépnév helyett használja a(z) localhost elemet. |
SSL Provider: [error:0A000086] |
TLS-tanúsítványérvényesítési hiba önaláírt tanúsítvány esetén. | Adja hozzá a(z) TrustServerCertificate=yes elemet a(z) extra_params elemhez, csak fejlesztéshez. |