3

pyodbc ライブラリを使用して、ubuntu Vm で実行されている python djanog Web アプリから Windows 上の SQL サーバーのリモート インスタンスに接続しています。

以下のように、データベース接続クラスがあります。これは、オブジェクトの接続を作成しようとする行で中断します (私が試した接続文字列がいくつかあります)。

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日以上ぐるぐる回っています。いくつかの助けをいただければ幸いです。

4

1 に答える 1

4

これを試して:

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

TDS バージョンを明示的に指定する必要があります。ここで使用できるさまざまな TDS バージョンを参照してください。

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

Django pyodbc 設定で同じことを行う必要があります。このバージョンの django-pyodbc を使用することをお勧めします。

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

うまくいきますように。

于 2014-07-23T19:52:11.233 に答える