【发布时间】:2018-08-14 16:16:13
【问题描述】:
我正在使用 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][ODBC Driver 13 for SQL Server][SQL Server]无效的对象名称'projectcreation_partner'。(208) (SQLExecDirectW)")
我相信当我创建表(makemigrations+migrate)而不是创建如下所示的表时:[projectcreation].[dbo].[projectcreation_partner] 它创建了这样的表[projectcreation].[username].[projectcreation_partner]。因此,将 dbo 我实际上希望看到它放入我的用户名..
我想当应用程序尝试连接到 db 时它找不到它,因为它正在寻找一个包含 dbo 而不是用户名的.. 当然,我可能是错的..
如果您需要更多信息,请告诉我,非常感谢任何帮助。
注意:db 和 application 都称为“projectcreation”,“partner”是其中一个模型的名称。
【问题讨论】:
-
和你的
default连接的数据库一样:如果其他没有指定,将使用默认数据库; dbo 方案是 sqlsrv 中的默认方案 - 如果未指定 other,则使用。我的意思是,您似乎正确地预测了原因。 -
@revoua 非常感谢您的回复!好的,如果我理解正确,您是在建议我输入“用户名”而不是“默认”?
-
否,您需要在查询中指定方案或在没有方案的情况下重新填充数据(或使用 dbo 代替用户名)
-
@GileBrt 在 SQL Server 中,您可以为用户设置默认架构。在 SSMS 中,如果您转到数据库 -> [DBNAME] -> 安全 -> 用户 -> [用户名],请单击常规部分。 “默认模式”是什么意思?我将我的设置为
dbo。 -
@FlipperPA 感谢您对在哪里可以找到数据库用户的默认模式的评论。它帮助我修复了它。 :) 我稍后会发布解决方案。
标签: sql-server django