【问题标题】:RHEL - Transitioned Django project from Windows throws django.db.utils.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not foundRHEL - 从 Windows 转换的 Django 项目抛出 django.db.utils.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found
【发布时间】:2016-11-07 16:27:58
【问题描述】:

我从一位前同事那里继承了一个 Django 项目。我的第一项工作是将开发版本从我们的生产 Windows 服务器迁移到 RHEL 服务器。此 Django 应用程序连接到 Intranet 上的 Microsoft SQL Server。

我已经设置了与 Windows 上相同版本的 Python 和 Django,安装了相同的库,修复了硬编码的文件系统路径,并设置了一个与 Windows 上使用的相同的虚拟环境。

当我跑步时

python manage.py runserver

我得到了错误

Performing system checks...

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function wrapper at 0x7eff42540de8>
Traceback (most recent call last):
  File "/srv/P27_D19/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "/srv/P27_D19/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 124, in inner_run
    self.check_migrations()
  File "/srv/P27_D19/lib/python2.7/site-packages/django/core/management/base.py", line 437, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/migrations/executor.py", line 20, in __init__
    self.loader = MigrationLoader(self.connection)
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/migrations/loader.py", line 52, in __init__
    self.build_graph()
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/migrations/loader.py", line 203, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 65, in applied_migrations
    self.ensure_schema()
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/migrations/recorder.py", line 52, in ensure_schema
    if self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor()):
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/backends/base/base.py", line 231, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/backends/base/base.py", line 204, in _cursor
    self.ensure_connection()
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/backends/base/base.py", line 199, in ensure_connection
    self.connect()
  File "/srv/P27_D19/lib/python2.7/site-packages/django/db/backends/base/base.py", line 171, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/srv/P27_D19/lib/python2.7/site-packages/sql_server/pyodbc/base.py", line 302, in get_new_connection
    timeout=timeout)
django.db.utils.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')

我已经安装了py-odbcunixODBCunixODBC-devel。我通过其主机名 ping 了数据库服务器,它成功地找到了该服务器。我们有身份验证设置,因此它将使用 Active Directory 自动进行身份验证。

我注意到有时此错误消息已与 freetds 相关联,但 freetds 在此应用程序的生产版本中未使用,因此我不需要它(尽管我确实尝试安装它但它没有无论如何都帮不上忙)。

【问题讨论】:

    标签: python sql-server django python-2.7 odbc


    【解决方案1】:

    您引用的错误的最后一行是重要的部分--

    django.db.utils.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')
    

    FreeTDS 未在此应用的生产版本中使用并不奇怪,因为大多数 Windows 用户开始(如果不留下)使用 Microsoft 的内置 ODBC 驱动程序(和驱动程序管理器)。

    您的 Linux 环境可能没有完全设置好,而且您似乎还没有安装任何 SQL Server 的 ODBC 驱动程序,如果您安装了,当然也没有配置任何 DSN。

    这些在 Linux 上不存在,直到/除非您安装它们,但您的 PyODBC 应用程序需要每个之一才能运行。

    【讨论】:

    • 我已经安装了 SQL Server ODBC 驱动程序。我在我的问题中提到我也尝试过 FreeTDS。我可以在 Python 中手动连接到 SQL Server,但我无法让 manage.py 工作。 : /
    • 我认为如果您遵循指南here 和/或here,您会找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2016-04-19
    • 2016-10-11
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多