配置Django连接MSSQL Server时执行migrate报错求助
解决Django
ConnectionDoesNotExist: 连接default不存在 错误 让我帮你一步步排查这个问题,从报错信息和你的配置细节来看,主要有几个关键问题需要解决:
1. 修正DATABASES配置中的NAME字段错误
你的settings.py里DATABASES['default']['NAME']设置成了'localhost',这是错误的!
NAME应该是你SQL Server中已经创建好的数据库名称(比如'my_django_db'),而不是主机地址;主机地址已经由HOST字段指定了。- 先把这个字段改成你实际要连接的数据库名,比如:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': '你的数据库名称', # 这里改成实际的数据库名 'HOST': 'localhost', 'USER': 'sa', 'PASSWORD': 'root*+123456*+789', 'PORT': '1433', 'OPTIONS': { 'driver': 'ODBC Driver 13 for SQL Server', } } }
2. 解决Python与Django版本的兼容性问题
你当前使用的是Python 3.8和Django 2.1.15,但Django 2.1.x系列只支持Python 3.5-3.7,Python 3.8是不兼容的!
这种版本不匹配会导致很多底层的配置加载异常,包括出现KeyError: 'default'这类奇怪的报错。你有两个选择:
- 降级Python到3.7版本,确保和Django 2.1.15兼容;
- 升级Django到2.2.x或更高版本(Django 2.2支持Python 3.5-3.8),同时要确保你的数据库后端(比如django-pyodbc-azure)也升级到对应兼容的版本。
3. 确认DATABASES配置被正确加载
有时候配置文件可能存在语法错误(比如遗漏逗号、括号不闭合),或者配置被其他代码覆盖,导致Django读取不到default连接。你可以临时在manage.py中添加调试代码,验证配置是否被正确加载:
import sys import django from django.conf import settings def main(): django.setup() # 打印加载的数据库配置 print("Loaded DATABASES config:", settings.DATABASES) from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) if __name__ == '__main__': main()
运行py manage.py shell,如果输出中没有'default'对应的配置,说明你的settings.py里的DATABASES配置存在语法错误,或者文件位置不正确,需要仔细检查。
4. 验证ODBC驱动的正确性(次要排查)
虽然当前报错是连接不存在,但也可以确认你的ODBC驱动是否正确:
- 你使用的是
ODBC Driver 13 for SQL Server,要确保这个驱动已经安装,并且是32位版本(因为你的Python是32位的Python38-32);如果驱动不匹配,后续连接数据库时也会报错。
优先解决前两个问题(NAME字段和版本兼容),这是导致你当前报错的最可能原因。
内容的提问来源于stack exchange,提问作者zgrizzly_7
相关产品推荐
相关产品推荐

