在這個快速入門中,你會建立一個 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