我正在使用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"是其中一个型号的名称。
答案 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,当它应该查找时表伙伴)。