Adaptive Server 不可用或不存在
Adaptive Server is unavailable or does not exist
我正在尝试通过 FreeTDS
连接到 mssql
服务器。
首先我通过 ODBC Driver 17 for SQL Server
尝试了它并且它有效。这是我在 settings.py
.
中的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'mssql_database': {
'ENGINE': 'django_pyodbc',
'NAME': 'blabla',
'USER': 'blabla',
'PASSWORD': 'blabla',
'HOST': '10.65.1.20',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
},
}
根据 this 指南,我在 Ubuntu 18.04
上安装了 FreeTDS
。
这是我的 /etc/odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
UsageCount=1
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout =
CPReuse =
这是新的 settings.py
部分
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'mssql_database': {
'ENGINE': 'django_pyodbc',
'NAME': 'blabla',
'USER': 'blabla',
'PASSWORD': 'blabla',
'HOST': '10.65.1.20',
'PORT': '',
'OPTIONS': {
'driver': 'FreeTDS',
'host_is_server': True,
'extra_params': "TDS_VERSION=8.0"
},
},
}
我有这个错误信息
pyodbc.OperationalError: ('08S01', '[08S01] [FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist (20009) (SQLDriverConnect)')
如何修复错误?该连接适用于 ODBC Driver 17 for SQL Server
。那么为什么它不适用于 FreeTDS
驱动程序呢?会不会是因为 /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
文件不存在?我找不到 libtdsS.so
.
$ pip list
Package Version
------------- -------
Django 1.8
django-pyodbc 1.1.3
pip 21.3.1
pyodbc 4.0.32
setuptools 59.6.0
sqlany-django 1.13
sqlanydb 1.0.11
wheel 0.37.1
如您所见,将 PORT
设置为 1433
- 但这只是您需要做的一部分。
TDS_Version=8.0
无效并且 将 在高于 1.3 的较新版本的 FreeTDS 上中断:https://www.freetds.org/userguide/ChoosingTdsProtocol.html
由于 Ubuntu18 附带 FreeTDS 1.00.82 版,假设您使用的是 SQL Server 2012 或更高版本,您应该使用 TDS 协议的 7.4 版。
按如下方式更改您的选项:
'OPTIONS': {
'driver': 'FreeTDS',
'host_is_server': True,
'extra_params': "TDS_Version=7.4"
},
您可能需要 re-run 您的迁移(如果有的话),因为较新的 TDS 版本支持更多 SQL 服务器字段,例如 DATE
和 DATETIME2
- 但是看起来您可能只是在使用 SQL 服务器进行读取。祝你好运!
我正在尝试通过 FreeTDS
连接到 mssql
服务器。
首先我通过 ODBC Driver 17 for SQL Server
尝试了它并且它有效。这是我在 settings.py
.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'mssql_database': {
'ENGINE': 'django_pyodbc',
'NAME': 'blabla',
'USER': 'blabla',
'PASSWORD': 'blabla',
'HOST': '10.65.1.20',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
},
}
根据 this 指南,我在 Ubuntu 18.04
上安装了 FreeTDS
。
这是我的 /etc/odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
UsageCount=1
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout =
CPReuse =
这是新的 settings.py
部分
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'mssql_database': {
'ENGINE': 'django_pyodbc',
'NAME': 'blabla',
'USER': 'blabla',
'PASSWORD': 'blabla',
'HOST': '10.65.1.20',
'PORT': '',
'OPTIONS': {
'driver': 'FreeTDS',
'host_is_server': True,
'extra_params': "TDS_VERSION=8.0"
},
},
}
我有这个错误信息
pyodbc.OperationalError: ('08S01', '[08S01] [FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist (20009) (SQLDriverConnect)')
如何修复错误?该连接适用于 ODBC Driver 17 for SQL Server
。那么为什么它不适用于 FreeTDS
驱动程序呢?会不会是因为 /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
文件不存在?我找不到 libtdsS.so
.
$ pip list
Package Version
------------- -------
Django 1.8
django-pyodbc 1.1.3
pip 21.3.1
pyodbc 4.0.32
setuptools 59.6.0
sqlany-django 1.13
sqlanydb 1.0.11
wheel 0.37.1
如您所见,将 PORT
设置为 1433
- 但这只是您需要做的一部分。
TDS_Version=8.0
无效并且 将 在高于 1.3 的较新版本的 FreeTDS 上中断:https://www.freetds.org/userguide/ChoosingTdsProtocol.html
由于 Ubuntu18 附带 FreeTDS 1.00.82 版,假设您使用的是 SQL Server 2012 或更高版本,您应该使用 TDS 协议的 7.4 版。
按如下方式更改您的选项:
'OPTIONS': {
'driver': 'FreeTDS',
'host_is_server': True,
'extra_params': "TDS_Version=7.4"
},
您可能需要 re-run 您的迁移(如果有的话),因为较新的 TDS 版本支持更多 SQL 服务器字段,例如 DATE
和 DATETIME2
- 但是看起来您可能只是在使用 SQL 服务器进行读取。祝你好运!