本文介绍如何将 Django 项目从 django-mssql-backend 包(使用 sql_server.pyodbc 引擎)迁移到 mssql-django 包。
Overview
包 mssql-django 是后续包 django-mssql-backend。 它继续为使用 pyodbc 的 SQL Server提供 Django 数据库后端,但具有更新的包名称、引擎标识符以及对较新的 Django 版本的支持。
| 功能 / 特点 | django-mssql-backend | mssql-django |
|---|---|---|
| 包名称 | django-mssql-backend |
mssql-django |
| 发动机 | sql_server.pyodbc |
mssql |
| Django 支持 | 2.2, 3.0, 3.1 | 3.2, 4.0, 4.1, 4.2, 5.0, 5.1, 5.2, 6.0 |
| 由...维护 | Microsoft | Microsoft |
| PyPI | pip install django-mssql-backend |
pip install mssql-django |
步骤 1:更新Python包
卸载旧包并安装新包:
pip uninstall django-mssql-backend
pip install mssql-django
如果使用 requirements.txt 文件,请替换包引用:
# Before
django-mssql-backend>=2.8.1
# After
mssql-django>=1.7
步骤 2:更新 DATABASE 引擎
在你的 settings.py 中,将 ENGINE 的值从 sql_server.pyodbc 更改为 mssql:
# Before
DATABASES = {
"default": {
"ENGINE": "sql_server.pyodbc",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 17 for SQL Server",
},
},
}
# After
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Note
mssql-django v1.7 默认为 ODBC 驱动程序 18。 可以通过在选项中 driver 显式指定驱动程序 17 来继续使用驱动程序 17。
步骤 3:更新INSTALLED_APPS
如果您的INSTALLED_APPS引用了sql_server,请更新:
# Before
INSTALLED_APPS = [
"sql_server",
# ...
]
# After - only needed if using inspectdb
INSTALLED_APPS = [
"mssql",
# ...
]
步骤 4:验证配置
运行快速验证以确保新后端成功连接:
python manage.py check
python manage.py showmigrations
步骤 5:运行测试套件
运行项目的测试套件,验证所有内容都适用于新后端:
python manage.py test
需要留意的破坏性更改
| Area | 更改 |
|---|---|
| 默认 ODBC 驱动程序 | v1.7 默认为 ODBC Driver 18 for SQL Server,默认情况下设置 Encrypt=yes (驱动程序 17 默认为 Encrypt=no)。 与使用自签名证书或不受信任证书的服务器的连接将失败,除非将 TrustServerCertificate=yes 添加到 extra_params 中。 或者,指定驱动程序 17 或在服务器上安装受信任的证书。 |
return_rows_bulk_insert |
默认值为 False. 将其设为 True,以启用在 bulk_create 之后返回 ID。 对于具有触发器的表,必须保持为 False。 请参阅 使用 mssql-django 执行批量操作。 |