Django ProgrammingError [42S02] [Microsoft] [用于SQL Server的ODBC驱动程序13] [SQL Server]无效的对象名称

时间:2018-03-06 17:50:25

标签: sql-server django

我正在使用Django version 2.0.2.我的Django应用程序已连接到MS SQL(下面的连接)。

  DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'projectcreation',
        'HOST': 'Host_name',
        'OPTIONS': {
        'driver': 'ODBC Driver 13 for SQL Server',
        'dns': 'projectcreation'
        },
}
}

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

  

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

我相信当我创建表(makemigrations + migrate)而不是创建如下所示的表时:[projectcreation].[dbo].[projectcreation_partner]它创建了这样的表[projectcreation].[username].[projectcreation_partner]。因此,将我实际期望看到的dbo放入我的用户名..

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

如果您需要更多信息,请告诉我们,非常感谢任何帮助。

注意:db和application都被称为" projectcreation"," partner"是其中一个型号的名称。

2 个答案:

答案 0 :(得分:0)

这对我有用:

首先,我删除了属于此“用户名”架构的所有表(首先备份数据)。

其次,在进行迁移之前,我将SQL Server中的默认架构更改为“dbo”。出于某种原因,我的默认架构是以我的用户名命名的,这就是首先出现问题的原因。要更改默认架构,请转到数据库 - > [DBNAME] - >安全 - >用户 - > [用户名]。在“常规”下的“属性”中,您应该能够更改“默认架构”字段的值。

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

python manage.py migrate --fake projectcreation zero

请注意,“projectcreation”是我的应用程序的名称。 之后,这个命令:

python manage.py migrate projectcreation

这样做是回滚到初始迁移(零)并应用它。如果没有此回滚,则数据库中没有任何更改。

就是这样。

答案 1 :(得分:0)

也可能是在你的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_partner,当它应该查找时表伙伴)。