Ubuntu Server部署Django连接MS SQL Server遇SyntaxError求助
首先,你遇到的SyntaxError: invalid syntax是Python版本不兼容导致的:代码里except ImportError, e:是Python 2的异常捕获语法,而你用的是Python 3.8,Python 3要求写成except ImportError as e:。这个问题出在sql-server.pyodbc库上,这个库是针对Python 2的老旧版本,和你的Python 3环境完全不兼容。
下面是具体的修复步骤:
1. 移除冲突的老旧库
你同时安装了django-mssql-backend和sql-server.pyodbc,这两个库功能重叠,而且sql-server.pyodbc==1.0是Python 2时代的产物,直接卸载它:
pip uninstall sql-server.pyodbc -y
2. 升级django-mssql-backend到兼容Python 3的版本
你当前用的django-mssql-backend==2.8.1虽然支持Python 3,但建议升级到和Django 3.0匹配的最新兼容版本(比如3.0.x系列),确保语法完全适配Python 3:
pip install --upgrade django-mssql-backend~=3.0.0
3. 修正数据库连接配置
你的Ubuntu环境里的HOST配置有问题:Windows上的localhost\\SQLEXPRESS是命名实例的写法,但在Linux的ODBC驱动里,需要用IP地址+端口或者调整为ODBC兼容的命名实例格式:
- 如果是连接Windows上的远程SQL Server Express,把
HOST改成你的Windows机器IP,1433(默认SQL Server Express的命名实例端口通常是1433,若有修改请对应调整); - 同时确保Windows的SQL Server允许远程连接,且防火墙开放了对应端口。
修正后的配置示例:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'mdm_db', 'USER': 'mdmuser', 'PASSWORD': 'mdmuser', 'HOST': '192.168.x.x,1433', # 替换成你的Windows机器实际IP 'PORT': '', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', # 可选:添加加密相关参数(根据你的SQL Server配置调整) 'extra_params': 'Encrypt=no' }, }, }
4. 重新验证依赖和运行
先确认依赖状态正常:
pip freeze
确保输出里没有sql-server.pyodbc,且django-mssql-backend是3.0.x版本。然后重新执行迁移并启动服务:
python manage.py migrate python manage.py runserver 0.0.0.0:8000
额外说明
关于你提到的pyodbc构建wheel失败:这是Ubuntu上缺少编译依赖导致的临时问题,你已经安装了unixodbc-dev、python3-dev等必要组件,最终能安装成功是正常的,你当前的pyodbc 4.0.30版本完全适配Python 3.8。
内容的提问来源于stack exchange,提问作者Admin Avenger

