Sql server Django编程错误[42S02][Microsoft][SQL Server的ODBC驱动程序13][SQL Server]对象名称无效

Sql server Django编程错误[42S02][Microsoft][SQL Server的ODBC驱动程序13][SQL Server]对象名称无效,sql-server,django,Sql Server,Django,我使用的是Django 2.0.2版。我的Django应用程序已连接到MS SQL(连接如下) 因此,我在尝试访问Django应用程序时遇到以下错误: django.db.utils.ProgrammingError:('42S02',“[42S02][Microsoft][SQL Server的ODBC驱动程序13][SQL Server]无效的对象名称'projectcreation_partner'。(208)(SQLExecDirectW)”) 我相信当我创建表(makemigratio

我使用的是
Django 2.0.2版。
我的Django应用程序已连接到
MS SQL
(连接如下)

因此,我在尝试访问Django应用程序时遇到以下错误:

django.db.utils.ProgrammingError:('42S02',“[42S02][Microsoft][SQL Server的ODBC驱动程序13][SQL Server]无效的对象名称'projectcreation_partner'。(208)(SQLExecDirectW)”)

我相信当我创建表(makemigrations+migrate)而不是创建这样的表时:
[projectcreation].[dbo].[projectcreation\u partner]
它创建了这样的表
[projectcreation].[username].[projectcreation\u partner]
。因此,我把我的用户名放在了
dbo
,而实际上我希望看到它

我想,当应用程序尝试连接到db时,它找不到它,因为它正在寻找一个包含dbo而不是用户名的应用程序。。当然,我可能错了

如果您需要更多的信息,请让我知道,任何帮助是非常感谢的


注意:db和应用程序都称为“projectcreation”,“partner”是其中一个模型的名称

以下是对我有效的方法:

首先,我删除了属于这个“用户名”模式的所有表(首先备份数据)

其次,在进行迁移之前,我将SQLServer中的默认模式更改为“dbo”。出于某种原因,我的默认模式是以我的用户名命名的,这就是问题的根源。要更改默认模式,请转到数据库->[DBNAME]->Security->Users->[username]。在“常规”下的属性中,您应该能够更改“默认模式”字段的值

第三,我移民了。首先,使用此命令:

python manage.py migrate——伪项目创建零
请注意,“projectcreation”是我的应用程序的名称。 之后,此命令:

python manage.py migrate projectcreation
它所做的是回滚到初始迁移(零),并应用它。如果没有此回滚,则数据库中没有任何更改


就这样

也可能是在您的models.py中

class tblOne(models.Model):
    col1 = ...

    class meta:  # This should be upper case 'M', so it should be 'class Meta'
        managed=...
        db_table='...'
应该是什么时候

class tblOne(models.Model):
    col1 = ...

    class Meta:
        managed=...
        db_table='...'
就我而言

由于这个小错误,它导致我的迁移文件配置错误(当我进行迁移时,迁移文件中没有写入一些模型的manage=False选项),因此django决定在一个数据库中创建一些表,但不是全部


因此,当Django开始引用配置错误的表时,Django不确定在哪里查找它(与您的情况类似,但在我的情况下,Django将查找配置错误的表projectcreation_合作伙伴,而它应该查找表合作伙伴).

它与连接中的默认数据库相同:如果未指定其他数据库,将使用默认数据库;dbo方案是sqlsrv中的默认方案-如果未指定其他方案,则使用该方案。我的意思是,你似乎正确地预测了原因。@revoua非常感谢你的回答!好的,如果我理解正确,您建议我将“username”改为“default”?不,您需要在查询中指定scheme,或者在SQL Server中重新填充不带scheme的数据(或者将dbo改为username)@gilebt,您可以为用户设置默认模式。在SSMS中,如果转到数据库->[DBNAME]->Security->Users->[username],请单击常规部分。“默认模式”是什么意思?我将我的设置为
dbo
@FlipperPA感谢您对在何处找到db用户的默认模式发表的评论。它帮助我修复了它。:)稍后我会发布解决方案。在我的例子中,转到数据库->[DBNAME]->Security->Users->[username],用户名是“dbo”。但它仍然显示下面给出的“无效对象名”错误。('42S02',“[42S02][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]无效的对象名称'accounts_studentprofile'。(208)(SQLExecDirectW);[42S02][Microsoft][ODBC Driver 13 for SQL Server][SQL Server]语句无法准备。(8180)”)在我的情况下,我应该是“class meta:”而不是“class meta:”。这导致我的迁移文件配置错误(当我进行迁移时,迁移文件中没有写入manage=False选项),因此django不确定在哪里查找正确的表。
class tblOne(models.Model):
    col1 = ...

    class Meta:
        managed=...
        db_table='...'