2015-12-23 10 views
5

मुझे लगता है कि मेरा प्रश्न Trying to query SQL Server from django running on Linux - Can't open lib '/path/to/libtdsodbc.so' का डुप्लिकेट कम है, लेकिन उत्तर पूरी तरह से उपयोगी नहीं है।dssango-pyodbc-azure के साथ MSSQL से कनेक्ट करने का प्रयास फ़ाइल में त्रुटि नहीं मिली

मैं निम्नलिखित बातें उपयोग कर रहा हूँ:

  1. उबंटू 15,04
  2. Python3
  3. Django 1.9 (pip3 के माध्यम से स्थापित)
  4. freetds-dev 0.91-6build1 के माध्यम से स्थापित apt-get
  5. django-pyodbc-azure/django-pyodbc pip3 के माध्यम से स्थापित
  6. एमएसएसक्यूएल 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, 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)") 

मैं संपादित किया है 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 
     } 
    } 
} 

मेरी धारणा यह है कि कनेक्शन str के DRIVER भाग odbc ड्राइवर के निष्पादन योग्य के लिए पूरी तरह से योग्य पथ होना चाहिए, और अभी यह "फ्रीटीडीएस" पर सेट है, जो फ़ाइल के रूप में मौजूद नहीं है। मेरे प्रश्न तब हैं:

  1. यदि मेरी धारणा सही है, तो मैं ड्राइवर के लिए मूल्य कैसे बदलूं?
  2. यदि मेरी धारणा गलत है, तो वास्तव में क्या गलत है, और मैं इसे कैसे हल करूं?

: निम्नलिखित शामिल करने के लिए

  1. sudo apt-get install tdsodbc
  2. संपादित /etc/odbcinst.ini:

उत्तर

6

मैं निम्न कार्य करने की जरूरत है।

[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 

और यह काम किया।

3

उपर्युक्त [फ्रीटीडीएस] कॉन्फ़िगरेशन बहुत उपयोगी है।

सेटिंग्स.py डेटा सत्र में, मैं ड्राइवर संस्करण के साथ-साथ यूनिकोड परिणाम सेटअप भी जोड़ता हूं। यहां मेरी कॉन्फ़िगरेशन है:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'myDataBaseNameInMSSQLServer', 
     'USER': 'mssql-user-with-SQL-authentication', 
     'PASSWORD': 'password', 
     'HOST': 'server-host-name-or-IP\\SQLEXPRESS', 
     'PORT': '1433', 
     'OPTIONS' : { 
      'AUTOCOMMIT': True, 
      'host_is_server': True, 
      'unicode_results': True, 
      'driver': 'FreeTDS', 
      'extra_params' : 'TDS_VERSION=8.0', 
      } 
    } 
} 

एसक्यूएल एक्सप्रेस के लिए, आपको Google कनेक्शन को रिमोट कनेक्शन के लिए उपलब्ध कराने के तरीके की भी आवश्यकता होगी।

संबंधित मुद्दे