You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何连接Django与SQL Server 2008 R2?迁移时遇语法错误求助

问题

执行python manage.py migrate命令时出现以下错误:

django.db.utils.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'OFFSET'附近有语法错误。(102) (SQLExecDirectW)")

数据库配置:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "xx",
        "USER": "xx",
        "PASSWORD": "xx",
        "HOST": "xx",
        "PORT": "1433",
        "OPTIONS": {"driver": "ODBC Driver 17 for SQL Server", 
        },
    },
}

相关版本信息:

  • SQL Server:Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)
  • Python:3.8.10
  • Django:3.1.7

解决方案

1. 指定SQL Server版本

SQL Server 2008 R2不支持OFFSET/FETCH分页语法,而Django默认会生成该语法。在数据库配置的OPTIONS中添加版本参数,让Django生成兼容的SQL语句:

DATABASES = {
    "default": {
        "ENGINE": "mssql",
        "NAME": "xx",
        "USER": "xx",
        "PASSWORD": "xx",
        "HOST": "xx",
        "PORT": "1433",
        "OPTIONS": {
            "driver": "ODBC Driver 17 for SQL Server",
            "sql_server_version": "2008"  # 添加此参数
        },
    },
}

2. 确认后端库兼容性

确保安装了适配的SQL Server后端库,Django 3.1.x需要django-mssql-backend 2.8.0及以上版本才能完美支持SQL Server 2008 R2:

pip install django-mssql-backend>=2.8.0

3. 备选方案:自定义分页逻辑

如果上述方法无效,可通过自定义数据库后端的分页类,强制使用ROW_NUMBER()替代OFFSET/FETCH实现分页。但此方法复杂度较高,优先推荐前两种方案。


内容的提问来源于stack exchange,提问作者Patricio Nicolas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:55:18