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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 22:42:35