使用django-pyodbc时在python manage.py dbshell / loaddata中遇到问题
我在通过 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'。