无法使用django-pyodbc连接到旧数据库

时间:2014-03-17 19:36:09

标签: django-pyodbc

我安装了django-pyodbc并将我的数据库设置配置为:

  1. DEV:Windows XP(64位),Python 3.3,MDAC 2.7
  2. DB:远程MSSQL 2008

    DATABASES = {
        'default': {
            'ENGINE': 'django_pyodbc',
            'HOST': 'my.server.com',
            'PORT': '14330',
            'USER': 'xxx500',
            'PASSWORD': 'passw',
            'NAME': 'xxx500',
            'OPTIONS': {
                'host_is_server': True
            },
        }
    }
    
  3. 我可以telnet到服务器,我可以通过第三方GUI Aqua Data Studio访问数据库 - 所以我知道登录问题没有防火墙问题

    当我尝试运行此命令来内省遗留数据库时,我收到此错误...

    (myProject) :\Users\...>python manage.py inspectdb
    Traceback (most recent call last):
      File "manage.py", line 10, in <module>
        execute_from_command_line(sys.argv)
      File "C:\Python33\lib\site-packages\django\core\management\__init__.py", line 399, in execute_from_command_line
        utility.execute()
      File "C:\Python33\lib\site-packages\django\core\management\__init__.py", line 392, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "C:\Python33\lib\site-packages\django\core\management\base.py", line 242, in run_from_argv
        self.execute(*args, **options.__dict__)
      File "C:\Python33\lib\site-packages\django\core\management\base.py", line 285, in execute
        output = self.handle(*args, **options)
      File "C:\Python33\lib\site-packages\django\core\management\base.py", line 415, in handle
        return self.handle_noargs(**options)
      File "C:\Python33\lib\site-packages\django\core\management\commands\inspectdb.py", line 27, in handle_noargs
        for line in self.handle_inspection(options):
      File "C:\Python33\lib\site-packages\django\core\management\commands\inspectdb.py", line 40, in handle_inspection
        cursor = connection.cursor()
      File "C:\Python33\lib\site-packages\django\db\backends\__init__.py", line 157, in cursor
        cursor = self.make_debug_cursor(self._cursor())
      File "C:\Python33\lib\site-packages\django_pyodbc\base.py", line 280, in _cursor
        autocommit=autocommit)
    pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)')
    

    我错过了什么?会很感激一些反馈。 感谢

3 个答案:

答案 0 :(得分:0)

我做了以下更改:

  

DATABASES = {
'default': {
    'ENGINE': 'django_pyodbc',
    'HOST': 'my.server.com',
    'PORT': '14330',
    'USER': 'xxx500',
    'PASSWORD': 'passw',
    'NAME': 'xxx500',
    'OPTIONS': {
        'host_is_server': True
    },
}
}
  

DATABASES = {
'default': {
    ...
    'HOST': 'my.server.com,14330',
    ...
}
}

并得到了utf-8错误,需要在django_pyodbc / base.py文件中注释掉364-367行。

答案 1 :(得分:0)

我认为这不是你想要使用的解决方案;修改django-pyodbc的代码不是一个好主意。也就是说,请确保您使用的是目前最新的django-pyodbc分支:

https://github.com/lionheart/django-pyodbc/

这是一个settings.py的示例数据库配置,我已经在以下平台上工作了(用于Linux的FreeTDS / UnixODBC):

  • Windows 7
  • Ubuntu作为Vagrant下的VM
  • 用于本地开发的Mac OS / X
  • RHEL 5 + 6

以下是配置:

DATABASES = {
    'default': {
        'ENGINE': 'django_pyodbc',
        'NAME': 'db_name',
        'USER': 'db_user',
        'PASSWORD': 'your_password',            
        'HOST': 'database.domain.com,1433',
        'PORT': '1433',
        'OPTIONS': {
            'host_is_server': True,
            'autocommit': True,
            'unicode_results': True,
            'extra_params': 'tds_version=8.0'
        },
    }
}

答案 2 :(得分:0)

您需要将驱动程序添加到数据库后端。

DATABASES = {
    'default': {
      .......
      'OPTIONS': {
       .......
       'driver' : 'SQL Server',
       .......
       },
    }
  }

的字符串。要使用的ODBC驱动程序。默认是&#34; SQL Server&#34;在Windows和&#34; FreeTDS&#34;在其他平台上。