首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用django-pyodbc-azure将django 1.11.6连接到MS SQL Server

无法使用django-pyodbc-azure将django 1.11.6连接到MS SQL Server
EN

Stack Overflow用户
提问于 2017-11-01 15:17:30
回答 2查看 1.2K关注 0票数 1

我正在开发一个django应用程序,它需要连接到2008。我使用django-pyodbc-azure后端。

环境:

  • Ubuntu 16.04
  • Apache 2.4
  • python 3.5.2
  • django 1.11.6
  • pyodbc 4.0.19
  • django-pyodbc-azure 1.11.0.0

我还安装了受抚养人: unixodbc unixodbc-dev tdsodbc freetds-dev

In /etc/freetds/freetds.conf:

代码语言:javascript
复制
[sqlserver]  
    host = mysqlserverhost.com
    port = 6789
    tds version = 8.0

在/etc/odbc.ini中:

代码语言:javascript
复制
[sqlserverdatasource]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Servername = sqlserver
Database = test
TDS_Version = 8.0

在/etc/odbcinst.ini中:

代码语言:javascript
复制
[ODBC]
Trace = Yes
TraceFile = /tmp/odbc.log

[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1

然后,我用以下方法测试了连接。

代码语言:javascript
复制
import pyodbc
db = pyodbc.connect('DRIVER={FreeTDS};SERVER=mysqlserverhost.com,6789;DATABASE=test;UID=admin;PWD=password;TDS_Version=8.0')
cursor = db.cursor()
cursor.execute("SELECT @@version;")
row = cursor.fetchone()
while row:
    print(row[0])
    row = cursor.fetchone()

我可以从上面的代码中看到Server的版本。

代码语言:javascript
复制
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 
Apr  2 2010 15:48:46 
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )

在我的django项目settings.py中,我配置了数据库后端。

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'test',
        'USER': 'admin',
        'PASSWORD': 'password',
        'HOST': 'mysqlserverhost.com',
        'PORT': '6789',
        'OPTIONS': {
            'driver': 'FreeTDS',
        },
    }
}

然而,当我打开我的应用程序页面,看到下面的错误。

代码语言:javascript
复制
File "/usr/local/lib/python3.5/dist-packages/sql_server/pyodbc/base.py" in get_new_connection
309.                                         timeout=timeout)
Exception Type: OperationalError at /myapp/
Exception Value: ('08001', '[08001] [unixODBC][FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

我的设置有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-05 12:29:20

如果您在这里搜索错误消息,让我强调,任何阻止登录的内容都会产生这个混乱。即使您忘记指定一个user

对于实际的登录问题没有任何提示,错误消息会误导连接/主机解决问题。

此外,当指定不可解析的主机时,超时不会在合理的时间范围内发生(我等待了>5分钟),而且ctrl+c不能中断该操作。我不得不挂起python,而不是关闭后台作业。

票数 0
EN

Stack Overflow用户

发布于 2017-11-06 00:48:10

我想我自己已经解决了这个问题,尽管我遇到了另一个问题。

答案实际上在django-pyodbc-azure包文档中。

  • host_is_server 布尔。只有在Unix/Linux下使用FreeTDS ODBC驱动程序才有意义。 默认情况下,当使用FreeTDS ODBC驱动程序时,主机设置中指定的值将在SERVERNAME ODBC连接字符串组件中使用,而不是在服务器组件中使用;这意味着该值应该是freetds.conf FreeTDS配置文件中存在的数据服务器定义的名称,而不是主机名或IP地址。

通过将'host_is_server': True添加到数据库后端设置中,我不再看到这个OperationalError。

现在,在我的django项目settings.py中,数据库后端是:

代码语言:javascript
复制
DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'test',
        'USER': 'admin',
        'PASSWORD': 'password',
        'HOST': 'mysqlserverhost.com',
        'PORT': '6789',
        'OPTIONS': {
            'driver': 'FreeTDS',
            'host_is_server': True
        },
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47058119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档