MSSQL django_pyodbc проблемы с подключением - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь подключиться к MSSQL с помощью django-pyodbc.Я установил все необходимые пакеты, такие как FreeTDS, unixODBC и django-pyodbc.Когда я подключаюсь, используя tsql и isql, я могу подключиться: -

>tsql -S mssql -U ********* -P ***********
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> 

isql -v mssql ********* ***********
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

Но, когда я пытаюсь подключиться из python, это не работает.Я получаю сообщение об ошибке ниже: -

>python
Python 2.7.14 (default, May 16 2018, 06:48:40)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyodbc;
>>> print(pyodbc.connect("DSN=GB0015APP09.dir.dbs.com;UID=*********;PWD=*************").cursor().execute("select 1"));
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')
>>>

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

Ниже приведены все связанные конфигурации: -

/root>cat .freetds.conf
[mssql]
host = my_server_name
instance = MSSQL
Port = 1433
tds version =

/root>cat /etc/odbc.ini
[ServerDSN]
Driver = FreeTDS
Description = FreeTDS
Trace = No
Servername = mssql
Server = my_server_name
Port = 1433
Database = my_db_name


/root>cat /etc/odbcinst.ini
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib64/libtdsodbc.so
Setup = /usr/lib64/libtdsS.so
fileusage=1
dontdlclose=1
UsageCount=1

Я потратил пару дней, пытаясь решить эту проблему, но безуспешно.

Пожалуйста, помогите мне.

РЕДАКТИРОВАТЬ

/root>tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v0.95.81
             freetds.conf directory: /etc
     MS db-lib source compatibility: yes
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 4.2
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes
                            OpenSSL: no
                             GnuTLS: yes

/root>odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Когда unixODBC видит DSN=GB0015APP09.dir.slb.com в строке подключения, он ищет в файлах odbc.ini (перечисленных odbcinst -j) запись, начинающуюся с [GB0015APP09.dir.slb.com].Он не находит ни одного, поэтому выдает ошибку «Имя источника данных не найдено ...», которую вы указали.

Если вы хотите указать имя сервера в строке подключения (соединение без DSN") вам нужно изменить DSN=GB0015APP09.dir.slb.com на SERVER=GB0015APP09.dir.slb.com.Вам также нужно будет указать другие важные атрибуты соединения (DRIVER=...;DATABASE=...) в строке подключения.Обратите внимание на атрибут TDS_Version=7.2, упомянутый в ответе @FlipperPA;он может избежать головной боли, связанной с использованием FreeTDS по умолчанию для старой версии 4.2 протокола TDS.

0 голосов
/ 26 сентября 2018

Попробуйте:

con = pyodbc.connect("DSN=GB0015APP09.dir.slb.com;UID=**;PWD=**;TDS_Version=7.2")
cursor = con.cursor()

results = cursor.execute("SELECT 1")
print(results)

Ключ TDS_Version=7.2 является ключевым.

Я начал использовать драйвер MSODBC вместо FreeTDS с Django.Если вы заинтересованы в прогулке, смотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...