如何在Django中配置测试用本地SQLite3数据库与生产用MSSQL数据库?
解决Django测试数据库配置的两个核心问题
我来帮你梳理下问题根源,直接给你可行的修复方案:
1. 修复 AttributeError: 'PosixPath' object has no attribute 'startswith' 错误
Django要求数据库配置里的NAME字段必须是字符串类型,但你用BASE_DIR / 'testdb.sqlite3'得到的是pathlib.Path对象,这就触发了属性错误。只需要把路径转成字符串即可:
'TEST': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(BASE_DIR / 'testdb.sqlite3'), # 转成字符串格式 # 划重点:SQLite是文件型数据库,不需要HOST、USER这类网络连接参数,直接删掉 }
2. 解决测试时仍连接生产服务器的问题
你之前移除BASE_DIR后还是出现生产库权限错误,核心原因是TEST配置里多了HOST参数——这个参数会让Django误以为要连接网络数据库,而SQLite完全不需要。另外还要确保生产库的ENGINE配置正确(你现在写的'engine'是占位符,要替换成实际的MSSQL引擎,比如'django.db.backends.mssql')。
修正后的完整配置示例:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mssql', # 替换为你实际的生产数据库引擎 'NAME': 'db', 'HOST': '1.1.1.1', 'PORT': '1', 'USER': 'username', 'PASSWORD': 'password', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', # 替换为你实际使用的驱动 'connection_timeout': 15 }, 'TEST': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(BASE_DIR / 'testdb.sqlite3'), # 所有SQLite不需要的配置(HOST/PORT/USER等)都删掉 } }, }
验证配置是否生效
修改后可以先执行这个命令确认测试库配置正常:
python manage.py inspectdb --database test
如果命令能正常执行(哪怕没有输出表结构,因为初始SQLite库是空的),就说明配置已经正确,不会再连接生产服务器了。
内容的提问来源于stack exchange,提问作者hadecolliday
相关产品推荐
相关产品推荐

