使用django-pyodbc时在python manage.py dbshell / loaddata中遇到问题

0 投票
1 回答
853 浏览
提问于 2025-04-18 10:54

我在通过 python manage.py dbshell 或 loaddata 连接 SQL Server 数据库时遇到了问题。

我在 Ubuntu 系统上,安装了 FreeTDS、unixODBC、pyodbc(版本 3.0.7)和 django-pyodbc,具体可以在这里找到:https://github.com/lionheart/django-pyodbc/

我可以顺利运行 syncdb 和 South 迁移。但是,当我尝试运行 dbshell 或 loaddata 时,就出现了这个错误:

[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect

我可以通过命令行使用 isql 和 tsql 成功连接。你们觉得我缺少了什么呢?

1 个回答

0

我找到了问题所在。

如果你想使用 dbshell 或 loaddata,你需要用一个命名的 DSN,而不是单纯的主机名。我在 /etc/freetds.conf、/etc/odbcinst.ini 和 /etc/odbc.ini 中都正确设置了这个,所以 tsql 和 isql 都能正常工作。

我在 settings.py 中使用的是这个默认的 DATABASE:

    'ENGINE': 'django_pyodbc',
    'NAME': 'db_name',
    'USER': 'user_name',
    'PASSWORD': 'pw',
    'HOST': 'hostname.domain.com,1433',
    'PORT': '1433',
    'OPTIONS': {
        'host_is_server': True,
        'autocommit': True,
        'unicode_results': True,
        'extra_params': 'tds_version=7.2'
    },

我必须把它改成:

    'ENGINE': 'django_pyodbc',
    'NAME': 'db_name',
    'USER': 'user_name',
    'PASSWORD': 'pw',
    'PORT': '1433',
    'OPTIONS': {
        'host_is_server': True,
        'dsn': 'dsn_name',
        'autocommit': True,
        'unicode_results': True,
        'extra_params': 'tds_version=7.2'
    },

你会注意到,第一个(出错的)例子使用了 'HOST',而第二个(正常的)例子在 'OPTIONS' 下使用了 'dsn'。

撰写回答