Устранение неполадок подключения pymssql к Azure mssql в облаке Linux в pythonanywhere

Мне не удалось подключиться к серверу MSSQL, размещенному в Azure, через pymssql на pythonanywhere. У меня нет предыдущего опыта работы с Linux, так что это усложняет задачу.

Я пробую этот образец скрипта с инструкциями:

host = "123.456.789.012"
username = "yourusername"
password = "yourpassword"
database = "yourdatabasename"

conn = pymssql.connect(host, username, password, database)
cursor = conn.cursor()

Но я получаю эту ошибку:

Traceback (most recent call last):
    File "pymssql.pyx", line 635, in pymssql.connect (pymssql.c:10734)
    File "_mssql.pyx", line 1902, in _mssql.connect (_mssql.c:21821)
    File "_mssql.pyx", line 637, in _mssql.MSSQLConnection.__init__ (_mssql.c:6581)
    File "_mssql.pyx", line 1630, in _mssql.maybe_raise_MSSQLDatabaseException (_mssql.c:17524)
_mssql.MSSQLDatabaseException: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (my_server_name.database.windows.net:1433)\n')
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "pymssql.pyx", line 641, in pymssql.connect (pymssql.c:10824)
pymssql.OperationalError: (20002, b'DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (my_server_name.database.windows.net:1433)\n')

Я решил, что это связано с используемой мной версией TDS, которую я получаю 4.2, запустив tsql -C на bash. Вот результат:

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

Я попытался разместить файл .freetds.conf как в home/myuser/, так и в home/myuser/my_virtual_env/, но это не изменило поведения. Должен ли я перезапустить консоль bash или консоль python? Я так не думал. Вот содержимое файла:

[global]
        tds version = 7.1


[azure]
        tds version = 7.4

Другой альтернативой было бы использование pyodbc, но это также включало бы настройку freetds, а затем еще кое-что, так что похоже, что там ничего не будет.


Я должен отметить, что у меня pymssql прекрасно подключается к Azure на моем компьютере с Win10 со следующей строкой подключения:

arguments = dict(server=db_server_add, user=db_usn+"@my_server",
                                 password=db_pswd, database=db_name, charset="utf8")
AZURE_ENGINE = create_engine('mssql+pymssql:///', connect_args=arguments)

person mvbentes    schedule 01.02.2017    source источник
comment
Быстрая вещь, чтобы перепроверить - вы бесплатный пользователь? PythonAnywhere не позволяет бесплатным пользователям устанавливать произвольные внешние подключения к Интернету. У них есть белый список для бесплатных пользователей.   -  person conrad    schedule 01.02.2017
comment
@conrad, нет. Я подписался на самый низкий уровень, чтобы почувствовать сервис. Перепробовал все инструкции доступные на сайте.   -  person mvbentes    schedule 02.02.2017
comment
вы перезагружали свои консоли после обновления?   -  person hwjp    schedule 06.02.2017
comment
@hwjp, вы имеете в виду переход на платный тип учетной записи? Я создал свой аккаунт как платный с самого начала. Кроме того, я не перезапускал ни одну консоль, но закрывал и открывал много новых консолей без изменений.   -  person mvbentes    schedule 07.02.2017
comment
можете ли вы сказать, используете ли вы ту же версию pymssql на своем ПК, что и на PythonAnywhere? Вы используете виртуалку?   -  person hwjp    schedule 08.02.2017
comment
@hwjp Обе должны быть одной и той же версии, поскольку обе являются свежими установками, но я смогу точно сказать, когда вернусь домой, через 4 часа. Дома я использую win10, хотя и PA - это linux. В PA я использую virtualenv напрямую с каталогом home/myuser/my_virtual_env/, тогда как дома я использую окружение conda.   -  person mvbentes    schedule 08.02.2017
comment
@hwjp да, они оба версии 2.1.3   -  person mvbentes    schedule 09.02.2017
comment
Возможно, связано: stackoverflow.com/q/39395548/2144390   -  person Gord Thompson    schedule 12.09.2017


Ответы (1)


В Python Anywhere на бесплатной учетной записи он не разрешает доступ ко всем веб-адресам. Только адреса из определенного списка.

«Если у вас есть платный план Python Anywhere»

https://help.pythonanywhere.com/pages/MSSQLServer/

person Юрий Федоров    schedule 10.09.2017
comment
Как упоминалось в комментариях, у OP есть платный аккаунт. - person FabienP; 10.09.2017