我认为我的问题或多或少是试图从在Linux上运行的django查询SQL Server的重复- 无法打开lib'/ path/to/libtdsodbc.so',但答案完全没有用.
我使用以下东西:
Ubuntu 15.04
Python3
Django 1.9
(通过pip3安装)
freetds-dev 0.91-6build1
通过apt-get安装
django-pyodbc-azure
/ django-pyodbc
通过pip3安装
MSSQL 2012
尝试连接时,执行python3 manage.py inspectdb
以下操作:
Traceback (most recent call last): File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 199, in ensure_connection self.connect() File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 171, in connect self.connection = self.get_new_connection(conn_params) File "/usr/local/lib/python3.4/dist-packages/sql_server/pyodbc/base.py", line 302, in get_new_connection timeout=timeout) pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found (0) (SQLDriverConnect)") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "manage.py", line 10, inexecute_from_command_line(sys.argv) File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 350, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 342, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 348, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 399, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.4/dist-packages/django/core/management/commands/inspectdb.py", line 25, in handle for line in self.handle_inspection(options): File "/usr/local/lib/python3.4/dist-packages/django/core/management/commands/inspectdb.py", line 38, in handle_inspection with connection.cursor() as cursor: File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 231, in cursor cursor = self.make_debug_cursor(self._cursor()) File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 204, in _cursor self.ensure_connection() File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 199, in ensure_connection self.connect() File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 95, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/usr/local/lib/python3.4/dist-packages/django/utils/six.py", line 685, in reraise raise value.with_traceback(tb) File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 199, in ensure_connection self.connect() File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/base.py", line 171, in connect self.connection = self.get_new_connection(conn_params) File "/usr/local/lib/python3.4/dist-packages/sql_server/pyodbc/base.py", line 302, in get_new_connection timeout=timeout) django.db.utils.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found (0) (SQLDriverConnect)")
我编辑了base.py来打印出它正在使用的连接字符串,即:
DRIVER=FreeTDS;DATABASE=test;PWD=test;UID=sa;PORT=1433;SERVER=10.13.36.223
我对数据库的settings.py如下所示:
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'test', 'USER': 'sa', 'PASSWORD': 'test', 'HOST': '10.13.36.223', 'PORT': '1433', 'AUTOCOMMIT': True, 'OPTIONS' : { 'host_is_server': True } } }
我的假设是DRIVER
连接str 的部分应该是odbc驱动程序的可执行文件的完全限定路径,并且现在它被设置为"FreeTDS",它不作为文件存在.我的问题是:
如果我的假设是正确的,我该如何更改驱动程序的值?
如果我的假设不正确,究竟是什么问题,我该如何解决?
Mitch.. 7
我需要做以下事情:
sudo apt-get install tdsodbc
编辑/etc/odbcinst.ini
以包括以下内容:
.
[FreeTDS] Description = TDS Driver for MSSQL driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
它奏效了.
我需要做以下事情:
sudo apt-get install tdsodbc
编辑/etc/odbcinst.ini
以包括以下内容:
.
[FreeTDS] Description = TDS Driver for MSSQL driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
它奏效了.