You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动