将 Django 连接到 MSSQL Server 2012 时出错
Posted
技术标签:
【中文标题】将 Django 连接到 MSSQL Server 2012 时出错【英文标题】:Error connecting Django to MSSQL Server 2012 【发布时间】:2019-03-26 06:46:15 【问题描述】:在为我当前的 django 项目进行迁移时出错。
下面是 settings.py 文件中编写的用于连接 MSSQL Server 的代码。
DATABASES =
'default':
'ENGINE':'sql_server.pyodbc',
'NAME':'JTPROD',
'HOST':'TZACL5X8H1N2\SQLEXPRESS', ##this is my local machine database
'USER':'xxx', ##ommitted for the post
'PASSWORD':'xxx',##ommitted for tht post
'PORT':'',
'OPTIONS':
'provider': 'SQLOLEDB', # Have also tried 'SQLCLI11' and 'SQLCLI10'
'extra_params': 'DataTypeCompatibility=80',
'driver':'SQL Server',
,
,
但是当我运行“python manage.py migrate
时出现以下错误Traceback(最近一次调用最后一次):文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\base.py", 第 216 行,在 ensure_connection self.connect() 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\base.py", 第 194 行,连接中 self.connection = self.get_new_connection(conn_params) 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sql_server\pyodbc\base.py”, 第 307 行,在 get_new_connection 中 timeout=timeout) pyodbc.OperationalError: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver]既不是 DSN 也不是 SERVER 关键字 提供 (0) (SQLDriverConnect); [08001] [微软] [ODBC SQL 服务器 Driver]无效的连接字符串属性(0)')
上述异常是以下异常的直接原因:
Traceback(最近一次调用最后一次):文件“manage.py”,第 15 行,在 execute_from_command_line(sys.argv) 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management__init__.py”, 第 381 行,在 execute_from_command_line utility.execute() 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management__init__.py", 第 375 行,执行中 self.fetch_command(subcommand).run_from_argv(self.argv) 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py” , 第 316 行,在 run_from_argv self.execute(*args, **cmd_options) 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py", 第 353 行,执行中 输出 = self.handle(*args, **options) 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\base.py” , 第 83 行,包裹 res = handle_func(*args, **kwargs) 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\management\commands\migrate.py” , 第 82 行,在句柄中 executor = MigrationExecutor(connection, self.migration_progress_callback) 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\executor.py", 第 18 行,在 init 中 self.loader = MigrationLoader(self.connection) 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\loader.py", 第 49 行,在 init 中 self.build_graph() 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\loader.py", 第 212 行,在 build_graph self.applied_migrations = recorder.applied_migrations() 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\recorder.py”, 第 61 行,在应用迁移中 如果 self.has_table(): 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\migrations\recorder.py", 第 44 行,在 has_table 中 在 self.connection.introspection.table_names(self.connection.cursor())中返回 self.Migration._meta.db_table 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\base.py", 第 255 行,在光标中 返回 self._cursor() 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\base.py", 第 232 行,在 _cursor 中 self.ensure_connection() 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\base.py", 第 216 行,在 ensure_connection self.connect() 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\utils.py", 第 89 行,在 退出 从 exc_value 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\base.py”中提高 dj_exc_value.with_traceback(traceback), 第 216 行,在 ensure_connection self.connect() 文件 "C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\base\base.py", 第 194 行,连接中 self.connection = self.get_new_connection(conn_params) 文件“C:\Users\elukamis\AppData\Local\Programs\Python\Python37-32\lib\site-packages\sql_server\pyodbc\base.py”, 第 307 行,在 get_new_connection 中 timeout=timeout) django.db.utils.OperationalError: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver]既不是 DSN 也不是 SERVER 提供的关键字 (0) (SQLDriverConnect); [08001] [微软] [ODBC SQL 服务器驱动]无效的连接字符串属性(0)')
有人知道我的配置中可能缺少什么吗?
【问题讨论】:
您的'HOST'
键包含反斜杠:'TZACL5X8H1N2\SQLEXPRESS'
,如果您使用原始字符串文字,该怎么办? r'TZACL5X8H1N2\SQLEXPRESS'
.
谢谢,刚刚尝试了您的建议,但遇到了同样的错误
我放的反斜杠是'server\instance'
server\instance
仅用于显式命名(有意选择为“命名实例”类型的安装)实例。 default
实例无法以这种方式访问。尝试删除\SQLEXPRESS
。
即使删除 \SQLEXPRESS 后仍然出现相同的错误。
【参考方案1】:
如果您仍在寻找答案,我不确定这是否会对您有所帮助,但当我遇到类似错误时它会帮助我。 SQL Server Express 默认禁用 TCP/IP 连接,但显然需要启用它们才能允许这样的连接。
打开 SQL Server 配置管理器,展开“SQL Server 网络配置”,然后单击“SQLEXPRESS 协议”。假设 TCP/IP 条目显示为已禁用,右键单击该条目并选择属性。在“协议”选项卡上,将“启用”设置为“是”。我还通过在“IPAll”部分(底部)的 TCP 端口字段中输入“1433”来更新“IP 地址”选项卡。然后我在 settings.py DATABASES 配置部分指定了'PORT':'1433',
。我不确定这是否必要,但按照这些步骤可以让我的应用成功连接到 SQL Server Express。
【讨论】:
以上是关于将 Django 连接到 MSSQL Server 2012 时出错的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Python 连接到 MSSQL Server 数据库
在 Server 2012 上通过 php 连接到 MSSQL