Как подключить удаленную базу данных SQL SERVER с помощью python и преобразовать таблицы в фрейм данных Pandas

Я использую ubuntu и python3.5. Пытаюсь подключиться к удаленной базе данных с учетными данными (демонстрация).

jdbc_host = '57.56.254.98'
jdbc_port = '21433'
jdbc_user = 'username'
jdbc_pass = "password"
jdbc_dbname = 'database'
jdbc_server=jdbc_host+':'+jdbc_port
jdbc_url = 'jdbc:sqlserver://{0}:{1}'.format(jdbc_host, jdbc_port,jdbc_dbname)
jdbc_driver_path = 'sqljdbc41.jar'
configProperties = {
    'user':jdbc_user,
    'password':jdbc_pass
}

я пробовал pyodbc, pymssql и pypyodbc со следующим кодом

con = pyodbc.connect("DRIVER={SQL Server};server=jdbc_server;database=jdbc_dbname;uid=jdbc_user,pwd=jdpc_pass")

и аналогичный пример кода, который я нашел на многих сайтах, все они возвращают некоторые ошибки, такие как

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found (0) (SQLDriverConnect)")

я попытался настроить сервер FreeTDS, но он возвращает ошибку

Authentication failed for user 'username'

хотя я могу подключить эту базу данных к pyspark, используя этот код с теми же учетными данными

marksInfo = spark.read.jdbc(url=jdbc_url, table='tablename', properties=configProperties)

Я могу читать и обрабатывать данные из него с помощью pyspark, но это довольно медленно для этой небольшой базы данных в операциях "Action", поэтому ищу альтернативы

Надеюсь, я понял. Спасибо, любая помощь будет оценена по достоинству.

/etc/odbcinst.ini

[SQL Server]
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 = 1

результат для команды: ldd /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

linux-vdso.so.1 =>  (0x00007ffc36b38000)
    libodbcinst.so.2 => /usr/local/lib/libodbcinst.so.2 (0x00007f28212f3000)
    libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007f28210a9000)
    libgnutls.so.30 => /usr/lib/x86_64-linux-gnu/libgnutls.so.30 (0x00007f2820d78000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f2820b5b000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2820791000)
    libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f2820586000)
    libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007f28202b4000)
    libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007f2820085000)
    libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007f281fe80000)
    libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007f281fc75000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f281fa5b000)
    libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007f281f7f6000)
    libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007f281f5c3000)
    libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007f281f3b0000)
    libnettle.so.6 => /usr/lib/x86_64-linux-gnu/libnettle.so.6 (0x00007f281f179000)
    libhogweed.so.4 => /usr/lib/x86_64-linux-gnu/libhogweed.so.4 (0x00007f281ef46000)
    libgmp.so.10 => /usr/lib/x86_64-linux-gnu/libgmp.so.10 (0x00007f281ecc6000)
    /lib64/ld-linux-x86-64.so.2 (0x0000560d012ae000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f281eac1000)
    libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007f281e8bd000)
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f281e6a2000)
    libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f281e499000)

я могу подключиться с помощью tsql к базе данных

tsql -S server:port -U username -P 'p@sword\\'  

Но pyodbc выдает эту ошибку

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'FreeTDS' : file not found (0) (SQLDriverConnect)")

person Waqar    schedule 21.09.2017    source источник
comment
Вы проверяли это? stackoverflow.com/questions/43606832/   -  person developer developer    schedule 21.09.2017
comment
Есть ли в вашем файле /etc/odbcinst.ini раздел [SQL Server]? Если да, то убедились ли вы, что запись Driver=... правильно указывает на соответствующий файл .so?   -  person Gord Thompson    schedule 21.09.2017
comment
отредактировал вопрос с конфигурацией odbcinst.ini @GordThompson   -  person Waqar    schedule 21.09.2017
comment
и я не смог найти правильную конфигурацию для файлов odbc *, я следовал этому руководству tryolabs.com/blog/2012/06/25/, но после настройки всего этого выдавало ошибку аутентификации для моего имени пользователя, хотя, как я объяснил, я могу подключить его к искре, поэтому учетные данные верны   -  person Waqar    schedule 21.09.2017
comment
Находит ли ldd /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so драйвер и все его зависимости?   -  person Gord Thompson    schedule 21.09.2017
comment
также включен результат команды   -  person Waqar    schedule 21.09.2017
comment
tsql -H 57.56.254.98 -p 21433 -U username -P password работает?   -  person Gord Thompson    schedule 21.09.2017
comment
да, это работает   -  person Waqar    schedule 22.09.2017
comment
sql alchemy теперь выдает эту ошибку ProgrammingError: (pyodbc.ProgrammingError) ('42000', [42000] [unixODBC][FreeTDS][SQL Server]Ошибка входа в систему для пользователя "имя пользователя". (18456) (SQLDriverConnect))   -  person Waqar    schedule 22.09.2017
comment
@Waqar, ты нашел какое-нибудь решение для этого? Я застрял в ошибке файл не найден (0) (SQLDriverConnect), он отлично работает в клиенте в режиме развертывания, но я получаю эту проблему при запуске в режиме кластера   -  person BigDataGeek    schedule 01.08.2020