快速入门:将 Django 连接到 SQL Server

在本快速入门中,你将创建 Django 项目,使用mssql-django、运行迁移并使用 Django ORM 执行基本数据操作,将其连接到SQL Server数据库。

先决条件

  • Python 3.8 或更高版本。 Django 6.0 需要Python 3.12 及更高版本。
  • 适用于 SQL Server 的 Microsoft ODBC Driver 17 或 18。 请参阅用于 SQL Server 的 ODBC 驱动程序下载
  • 具有有效登录名的SQL Server实例或Azure SQL 数据库。

步骤 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",
        },
    },
}

步骤 4:定义模型

编辑 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

settings.py中将"myapp"添加到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。 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+,或者在 Linux 或 macOS 上使用 Ctrl+D

Note

如果收到Invalid object name 'myapp_product'错误,即使应用了 Django 的迁移历史记录声明myapp_product0001_initial该表也不存在于数据库中。 退出 shell,然后重置迁移历史记录并重新应用它:

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

后续步骤