1

Django と PyODBC を使用して SQL Server 2000 データベースに接続していますが、次のエラーが発生します。

例外の種類: NotImplementedError

例外値: SQL Server v8 はサポートされていません。

私のトレースバック:

Environment:


Request Method: POST
Request URL: http://localhost/sistemas/cadastro_paciente/

Django Version: 1.10.5
Python Version: 2.7.12
Installed Applications:
['admin_tools',
 'admin_tools.theming',
 'admin_tools.menu',
 'admin_tools.dashboard',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'cadastro',
 'fenotipo',
 'cuser']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'cuser.middleware.CuserMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/var/www/sistemas/cadastro/views.py" in cadastro_paciente
  1297.             if pacienteDB and pacienteHGP:

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in __nonzero__
  264.         return type(self).__bool__(self)

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in __bool__
  260.         self._fetch_all()

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in _fetch_all
  1087.             self._result_cache = list(self.iterator())

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in __iter__
  54.         results = compiler.execute_sql()

File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in execute_sql
  824.             sql, params = self.as_sql()

File "/usr/local/lib/python2.7/dist-packages/sql_server/pyodbc/compiler.py" in as_sql
  82.             supports_offset_clause = self.connection.sql_server_version >= 2012

File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py" in __get__
  35.         res = instance.__dict__[self.name] = self.func(instance)

File "/usr/local/lib/python2.7/dist-packages/sql_server/pyodbc/base.py" in sql_server_version
  390.         with self.temporary_connection() as cursor:

File "/usr/lib/python2.7/contextlib.py" in __enter__
  17.             return self.gen.next()

File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py" in temporary_connection
  564.         cursor = self.cursor()

File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py" in cursor
  231.             cursor = self.make_debug_cursor(self._cursor())

File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py" in _cursor
  204.         self.ensure_connection()

File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py" in ensure_connection
  199.                 self.connect()

File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/base.py" in connect
  173.         self.init_connection_state()

File "/usr/local/lib/python2.7/dist-packages/sql_server/pyodbc/base.py" in init_connection_state
  349.         if self.sql_server_version < 2008:

File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py" in __get__
  35.         res = instance.__dict__[self.name] = self.func(instance)

File "/usr/local/lib/python2.7/dist-packages/sql_server/pyodbc/base.py" in sql_server_version
  395.                 raise NotImplementedError('SQL Server v%d is not supported.' % ver)

Exception Type: NotImplementedError at /cadastro_paciente/
Exception Value: SQL Server v8 is not supported.

私のodbc.ini:

[HGP]
Driver = FREETDS
Server = "IP"
Port = 1433
Database = database
Driver = /usr/local/lib/libtdsodbc.so
UsageCount = 1

私のfreetds.conf

[HGP]
database = database
host = "IP"
port = 1433
tds version = 8.0

odbcinst.int でのドライバー構成

[FREETDS]
Description = FreeTDS
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount = 1

私のsettings.py

'hgp': {
        'ENGINE': 'sql_server.pyodbc', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'hemovida',            # Or path to database file if using sqlite3.
        'USER': 'sa',                  # Not used with sqlite3.
        'PASSWORD': '',                # Not used with sqlite3.
        'HOST': 'IP',         # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',

        'OPTIONS': {
                'driver': 'FREETDS',
                'MARS_Connection': False,
                'dsn' : 'HGP',
            },
    },

私のクエリ

pacienteHGP = Paciente_Hemovida.objects.using('hgp').filter(paciente=postPaciente)
4

1 に答える 1

4

前述のとおり、SQL Server 2000 を使用することは非常に悪い考えです。Microsoft からのサポート、バグ修正、または最も重要なセキュリティ パッチは提供されません。

とはいえ、 を使用している場合はdjango-pyodbc-azure、モンキー パッチを適用して機能させることができる場合があります。次の行を参照してください。

https://github.com/michiya/django-pyodbc-azure/blob/azure-1.10/sql_server/pyodbc/base.py#L145

辞書8: 2000,に追加:_sql_server_version

_sql_server_versions = {
    8: 2000,
    9: 2005,
    10: 2008,
    11: 2012,
    12: 2014,
    13: 2016,
    14: 2017,
}

これがどのように機能するか、または機能しないかについては保証できませんが、試してみてください。これにより、発生しているエラーを回避できます。

は有効な TDS バージョンではないためfreetds.conf、も変更する必要があります。8.0

[HGP]
database = database
host = "IP"
port = 1433
tds version = 7.1

ソース: http://www.freetds.org/userguide/choosingtdsprotocol.htm

幸運を祈るとともに、最新バージョンの SQL Server にアップグレードすることを強くお勧めします。

于 2017-03-30T17:45:40.843 に答える