DjangoCMS部署SQL Server 2017遇ProgrammingError问题求助
嘿,我之前也踩过DjangoCMS搭配SQL Server的坑,结合你用的Django 1.11.10、Python 3.6.4和SQL Server 2017这个环境,给你梳理几个大概率能解决问题的方向:
检查SQL Server的兼容性与字符集
首先确认你的数据库兼容性级别至少是100(Django 1.11对SQL Server的最低要求),可以在SSMS里执行这条查询:SELECT name, compatibility_level FROM sys.databases WHERE name = '你的数据库名';如果低于100,执行这条命令修改:
ALTER DATABASE 你的数据库名 SET COMPATIBILITY_LEVEL = 100;另外,确保数据库用的是支持Unicode的排序规则,比如
SQL_Latin1_General_CP1_CI_AS,避免字符编码导致的语法异常。验证SQL Server驱动配置
你应该用的是django-pyodbc-azure驱动吧?Django 1.11搭配SQL Server必须靠它,检查settings.py里的数据库配置是否正确:DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': '你的数据库名', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': '服务器地址', 'PORT': '1433', 'OPTIONS': { 'driver': 'ODBC Driver 13 for SQL Server', 'MARS_Connection': 'True', 'unicode_results': True, }, } }注意driver版本,SQL Server 2017推荐用ODBC Driver 13或17,别用太老旧的版本。
重新执行cms_wizard相关迁移
有时候迁移没跑全,或者SQL Server对某些Django迁移语法不兼容,尝试重新执行迁移:python manage.py migrate --fake-initial python manage.py migrate cms python manage.py migrate djangocms_wizard如果迁移过程中报错,把错误信息记下来——大概率是某个字段类型SQL Server不支持,这时候可能需要手动调整迁移文件里的字段定义,比如把超长的
TextField换成CharField(如果业务允许)。查看具体的错误详情
你现在只提到了ProgrammingError,但没说具体是啥错误(比如是列不存在,还是SQL语法错误?)。打开Django的调试模式(DEBUG=True),访问报错页面时,会显示完整的错误栈,找到生成的SQL语句那一行,看看是执行哪条SQL出的问题,再针对性修复。调整DjangoCMS版本
Django 1.11.10属于老版本,对应的DjangoCMS应该用3.5.x系列(3.6+需要Django 2.0+),确认你安装的版本是兼容的,比如指定版本安装:pip install django-cms==3.5.4 pip install djangocms-wizard==0.2.0新版本的wizard组件可能对老环境兼容性不好,降级到稳定兼容版本说不定能解决问题。
希望这些步骤能帮你搞定问题,要是有具体的错误信息补充上来,我再帮你细化解决方案~
内容的提问来源于stack exchange,提问作者Mixo

