Tôi nghĩ câu hỏi của tôi ít nhiều trùng lặp với Trying to query SQL Server from django running on Linux - Can't open lib '/path/to/libtdsodbc.so', nhưng câu trả lời hoàn toàn không hữu ích.Cố gắng kết nối với MSSQL với kết quả django-pyodbc-azure trong tập tin không tìm thấy lỗi
Tôi đang sử dụng những điều sau đây:
- Ubuntu 15,04
Python3
Django 1.9
(cài đặt qua PIP3)freetds-dev 0.91-6build1
cài đặt qua apt-getdjango-pyodbc-azure
/django-pyodbc
cài đặt qua PIP3- MSSQL 2012
Khi cố gắng để kết nối, làm một python3 manage.py inspectdb
tôi nhận được stack trace sau:
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, in <module>
execute_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)")
tôi đã chỉnh sửa base.py để in ra chuỗi kết nối nó đang sử dụng, đó là:
DRIVER=FreeTDS;DATABASE=test;PWD=test;UID=sa;PORT=1433;SERVER=10.13.36.223
settings.py của tôi cho các cơ sở dữ liệu trông giống như:
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
}
}
}
Giả thiết của tôi là phần DRIVER
của đường kết nối phải là đường dẫn đầy đủ để thực thi cho trình điều khiển odbc và ngay bây giờ nó được đặt thành "FreeTDS", không tồn tại dưới dạng tệp. Câu hỏi của tôi sau đó là:
- Nếu giả định của tôi là chính xác, làm cách nào để thay đổi giá trị cho người lái xe?
- Nếu giả định của tôi không chính xác, điều gì thực sự sai, và làm cách nào để giải quyết vấn đề này?