Django 2.0.2连接MS SQL出现Invalid object name错误求助
解决Django 2.0.2连接MS SQL时"Invalid object name"的表名问题
我之前也踩过类似的Django对接MS SQL的表名解析坑,结合你的描述,这个错误确实是因为Django生成的SQL没有带上正确的Schema前缀,导致SQL Server找不到对应的表。下面给你几个针对性的解决办法:
1. 在数据库连接配置中指定默认Schema
首先检查你的DATABASE配置,确保在OPTIONS里明确指定SQL Server的Schema(通常是dbo),这样Django在生成SQL时会自动带上这个前缀:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': '你的数据库名', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': '数据库地址', 'PORT': '1433', 'OPTIONS': { 'driver': 'ODBC Driver 13 for SQL Server', # 关键:指定默认Schema 'schema': 'dbo', 'MARS_Connection': 'True', # 可选,根据你的需求添加 }, } }
2. 给模型手动指定带Schema的表名
如果全局配置没生效,或者某个模型需要单独指定Schema,可以在模型的Meta类里直接定义完整的表名(包含Schema):
from django.db import models class Partner(models.Model): # 你的模型字段 partner_name = models.CharField(max_length=200) contact_email = models.EmailField() class Meta: # 明确指定带Schema的表名,两种写法都可以 db_table = 'dbo.projectcreation_partner' # 或者如果表名有特殊字符,用方括号包裹:'[dbo].[projectcreation_partner]'
3. 重新执行迁移命令
修改配置或模型后,需要重新生成并应用迁移,确保表是按正确的Schema创建的:
# 先清除可能存在的错误迁移文件(可选,如果你之前的迁移已经生成了错误的表) rm projectcreation/migrations/000*.py # 重新生成迁移文件 python manage.py makemigrations projectcreation # 应用迁移到数据库 python manage.py migrate
执行完后,你可以登录SQL Server,检查是否生成了[dbo].[projectcreation_partner]格式的表。
4. 检查数据库用户的默认Schema
还有一种情况:连接SQL Server的用户默认Schema不是dbo,导致创建表时自动放到了用户的默认Schema下,而Django查询时还是找dbo下的表。这种情况可以在SQL Server中修改用户的默认Schema:
ALTER USER [你的数据库用户名] WITH DEFAULT_SCHEMA = dbo;
修改后再重新执行迁移,表就会默认创建在dbo Schema下了。
内容的提问来源于stack exchange,提问作者GileBrt




