2014-07-23 6 views
3

Я использую библиотеку pyobbc для подключения к удаленный экземпляр sql-сервера в окнах из веб-приложения python djanog, работающего на ubuntu Vm.Исключительное значение: ('08001', '[08001] [unixODBC] [FreeTDS] [SQL Server] Не удается подключиться к источнику данных (0) (SQLDriverConnect)')

У меня есть класс подключения к базе данных, как показано ниже, который разбивается на строку, где я пытаюсь создать соединение объекта (существует ряд подключений, которые я пытался);

import pyodbc 


class SQLSeverConnection(): 

def __init__(self, DSN, user, password, database): 
    connectionString = 'DSN=MSSQLServerDataSource;UID=django;PWD=password123!;DATABASE=HD' 

    self.connection = pyodbc.connect(connectionString) 
    self.cursor = self.connection.cursor() 

def getTableNames(self): 
    self.cursor.execute('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = \'BASE TABLE\'') 
    tables = self.cursor.fetchall() 
    return tables 

def getColumnTitles(self, tableName): 
    self.cursor.execute("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + tableName + "' ORDER BY ORDINAL_POSITION") 
    columns = self.cursor.fetchall() 
    return columns 

def getColumnData(self, columnName, tableName, startDateTime, endDateTime): 
    self.cursor.execute('SELECT ' + columnName + ' FROM ' + tableName + ' BETWEEN ' + startDateTime + ' AND ' + endDateTime + ' ORDER BY timestamp') 
    data = self.cursor.fetchall() 
    return data 

Когда я запускаю сервер, я получаю сообщение об ошибке, как описано в заголовке.

Мои конфигурационные файлы:

(odbc.ini) 
[MSSQLServerDataSource] 
Driver = FreeTDS 
Description = ODBC connection via FreeTDS 
Trace = No 
Servername = MSSQLServer 
Database = HD 
TDS_Version = 8.0 

(odbcinst.ini) 
[FreeTDS] 
Description = TDS driver (Sybase/MS SQL) 
# Some installations may differ in the paths 
#Driver = /usr/lib/odbc/libtdsodbc.so 
#Setup = /usr/lib/odbc/libtdsS.so 
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so 
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so 
CPTimeout = 
CPReuse = 
FileUsage = 4 

(freetds.conf) 
# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ 
# 
# This file is installed by FreeTDS if no file by the same 
# name is found in the installation directory. 
# 
# For information about the layout of this file and its settings, 
# see the freetds.conf manpage "man freetds.conf". 

# Global settings are overridden by those in a database 
# server specific section 
[global] 
    # TDS protocol version 
; tds version = 4.2 

# Whether to write a TDSDUMP file for diagnostic purposes 
# (setting this to /tmp is insecure on a multi-user system) 
; dump file = /tmp/freetds.log 
; debug flags = 0xffff 

# Command and connection timeouts 
; timeout = 10 
; connect timeout = 10 

# If you get out-of-memory errors, it may mean that your client 
# is trying to allocate a huge buffer for a TEXT field. 
# Try setting 'text size' to a more reasonable limit 
text size = 64512 

#Server For Django App 
[MSSQLSever] 
    host = <ip> 
    port = 1433 
    tds version = 8.0 

Когда я ввожу odbcinst -j в терминал;

unixODBC 2.2.14 
DRIVERS............: /etc/odbcinst.ini 
SYSTEM DATA SOURCES: /etc/odbc.ini 
FILE DATA SOURCES..: /etc/ODBCDataSources 
USER DATA SOURCES..: /home/user/.odbc.ini 
SQLULEN Size.......: 8 
SQLLEN Size........: 8 
SQLSETPOSIROW Size.: 8 

Соединение выполняется из командной строки с использованием isql и dsn, пользователя и пароля.

Я действительно не знаю, что делать, я обходил кругами с этим уже более дня. Некоторая помощь будет принята с благодарностью!

+1

Я должен был указать 'PORT = 1433' и' TDS_Version = 7.2' в строке подключения. – BurnsBA

ответ

4

Попробуйте это:

connectionString = 'DRIVER={FreeTDS};SERVER=10.1.3.230;PORT=1433;DATABASE=HD;UID=django;PWD=password123!;TDS_Version=7.2;' 

Вы должны указать TDS версии в явном виде. Смотрите различные версии TDS вы можете использовать здесь, 7,2 работал 2008+ для меня на каждом SQL Server до 2014 года:

http://www.freetds.org/userguide/choosingtdsprotocol.htm

Вам нужно сделать то же самое в настройках pyodbc Django. Я бы рекомендовал использовать эту версию Джанго-pyodbc:

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

удачи, дайте мне знать, если он работает для вас.

+0

привет, выясняется, что проблема была неправильной написание в моем файле freetds.conf. у меня было ошибочно написано имя моего сервера как MSSQLSever! Теперь о следующей проблеме ... –

+1

Как сказал мой друг: «Все ошибки клерики!» Хорошая работа, отслеживающая его. – FlipperPA

 Смежные вопросы

  • Нет связанных вопросов^_^