快速入門:將 Django 連接到 SQL Server

在這個快速入門中,你會建立一個 Django 專案,利用它mssql-django連接到 SQL Server 資料庫,執行遷移,並使用 Django ORM 執行基本資料操作。

先決條件

  • Python 3.8 或更新版本。 Django 6.0 需要 Python 3.12 及更新版本。
  • 適用於 SQL Server 的 Microsoft ODBC Driver 17 或 18。 請參閱下載 SQL Server 的 ODBC 驅動程式
  • 一個 SQL Server 實例或 Azure SQL Database,且登入有效。

步驟 1:安裝 mssql-django

建立虛擬環境並安裝套件:

python -m venv .venv
.venv\Scripts\activate
pip install mssql-django

步驟 2:建立 Django 專案

建立一個新的 Django 專案和應用程式:

django-admin startproject myproject
cd myproject
python manage.py startapp myapp

步驟 3:設定資料庫

編輯 myproject/settings.py 並替換預設 DATABASES 設定。

連接到 SQL Server

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>",
        "PORT": "1433",
    },
}

謹慎

僅用於 TrustServerCertificate=yes 本地開發,並使用自簽憑證。 不要在生產環境中使用它。 它會禁用憑證鏈驗證,並增加中間攻擊者的風險。 在伺服器上安裝受信任憑證並連接到 TrustServerCertificate=no

連接到 Azure SQL 資料庫

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "<your-database>",
        "USER": "<your-username>",
        "PASSWORD": "<your-password>",
        "HOST": "<your-server>.database.windows.net",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 18 for SQL Server",
            "extra_params": "Encrypt=yes",
        },
    },
}

步驟四:定義模型

編輯 myapp/models.py

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

"myapp"新增至settings.py中的INSTALLED_APPS

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "myapp",
]

步驟 5:執行遷移

產生並套用資料庫遷移:

python manage.py makemigrations myapp
python manage.py migrate

確認 myapp 遷移已應用:

python manage.py showmigrations myapp

您應該會看到 [X] 0001_initial。 如果你看到 [ ] 0001_initial,請先重新執行 python manage.py migrate myapp,再繼續。

步驟 6:使用 Django ORM

打開 Django 外殼。 Shell 是一個已載入你的 Django 專案的互動式 Python 工作階段,並以 >>> 提示符表示。

python manage.py shell

在提示 >>> 時,匯入模型:

from myapp.models import Product

建立紀錄:

product = Product.objects.create(name="Widget", price=9.99)
print(f"Created: {product.name} (id={product.pk})")

讀取記錄:

for p in Product.objects.all():
    print(f"{p.name}: ${p.price}")

更新紀錄:

product.price = 12.99
product.save()

刪除紀錄:

product.delete()

使用 exit() 退出 Shell。 或者,在 Windows 上使用 Ctrl+Z,或在 Linux 或 macOS 上使用 Ctrl+D

Note

如果出現 Invalid object name 'myapp_product' 錯誤,該資料表在 myapp_product 資料庫中不存在,儘管 Django 的 0001_initial 遷移歷史聲稱已套用。 退出 shell 環境,然後重設遷移歷史並重新套用:

python manage.py migrate myapp zero --fake
python manage.py migrate myapp

後續步驟