Installasjon
Start med å installere pakken gjennom din foretrukne python-pakkemanager:
pip install mssql-django
Vi valgte å legge til støtten for MS SQL ved å bruke Django’s multi-DB-funksjonalitet, slik at vi kan velge hvilken av databasene vi ønsker å koble til. Om du ønsker samme opplevelse, oppdater DATABASES i settings.py slik:
DATABASES = {
# Access with `Model.objects.using("postgresql")`
"postgresql": {
...
},
# Access with `Model.objects.using("mssql")`
"mssql": {
"ENGINE": "mssql",
"HOST": os.getenv("DB_HOST", "localhost"),
"PORT": os.getenv("DB_PORT", 1433),
"NAME": os.getenv("DB_NAME", "master"),
"USER": os.getenv("DB_USER", "sa"),
"PASSWORD": os.getenv("DB_PASSWORD"),
"OPTIONS": {
"driver": "ODBC Driver 17 for SQL Server", # Default
"extra_params": (
# Use this if connecting without SSL certs
"TrustServerCertificate=yes;"
),
},
},
}
# If you prefer a drop-in replacement
DATABASES = {
"default": DATABASES["mssql"]
}
Bruk disse env-variablene for å kontrollere tilkoblingen:
DB_HOST
: Adressen til databasetjenerenDB_PORT
: Porten til databasetjeneren (standard for MS SQL er 1433)DB_NAME
: Navnet på databasen (standard for MS SQL ermaster
)DB_USER
: Brukeren som kobler til (standard for MS SQL ersa
)DB_PASSWORD
: Passordet til brukeren som kobler til
Ytterligere konfigurerbare valg for adapteren er beskrevet i den offisielle dokumentasjonen: https://github.com/microsoft/mssql-django#options
Testing
For å teste tilkoblingen før utrulling kan man spinne opp en lokal databasetjener. Microsoft tilbyr et Docker-image for enklere installasjon. For en enda enklere løsning har vi laget en Docker compose fil som kan hentes her: https://github.com/Ur-Solutions/MS-SQL-Server
services:
mssql:
# Documentation: https://mcr.microsoft.com/en-us/product/mssql/server/about
image: mcr.microsoft.com/mssql/server:2019-latest
restart: unless-stopped
environment:
ACCEPT_EULA: Y
# Default username = "sa"
MSSQL_SA_PASSWORD: "passWORD1" # At least 8 characters including uppercase, lowercase letters, base-10 digits and/or non-alphanumeric symbols.
MSSQL_PID: Developer
ports:
- 1433:1433
volumes:
- ./data:/var/opt/mssql
Bytt ut Docker image-taggen (2019-latest
) for å velge foretrukket versjon av databasen.
Django
I tillegg til databasetjeneren, er du nødt til å installere følgende pakker lokalt på maskinen din for å koble til gjennom Django:
# Install database driver for use with Django
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql17 mssql-tools
# mssql-django depends on pyodbc, which needs to be installed separately
brew install unixodbc
python -m pip install pyodbc
Merk at de samme pakkene også trengs å installeres i konteineren om du bygger et Docker-image av din Django-applikasjon!
For mer informasjon, se denne installasjonsguiden.
Nå kan du teste tilkoblingen ved å f.eks. kjøre:
python manage.py showmigrations --database=mssql
Fallgruver
Selv om det er lekende lett å komme i gang med MS SQL i Django, er det viktig å påpeke at dette er en egen databaseteknologi med både fordeler og ulemper man må være klar over. Det første man bør sjekke før man gjennomfører en slik endring er om man har i bruk noen PostgreSQL-spesifikke felttyper, f.eks. ArrayField, og undersøke om det finnes en tilsvarende type i MS SQL.
Databaseadapteren har også noen begrensninger, blant annet knyttet til datofelt med tidssone. Vi anbefaler å lese gjennom listen for å se om det er noen dealbreakere for akkurat din applikasjon. I vårt tilfelle var vi nødt til å gjøre manuelle endringer i enkelte migrasjonsfiler for at disse kunne utføres på MS SQL-tjeneren uten problemer.
Til slutt en påminnelse hvis du skriver rå SQL-spørringer; MS SQL-syntaksen er ulik f.eks. PostgreSQL sin. Vi antar de fleste som bruker Django i stor grad forholder seg til ORMen, men om du har områder som ikke gjør det er du nødt til å skrive om spørringene.