Подключение к базе данных Sybase с использованием Python 3.6 и pymssql - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь подключиться к базе данных Sybase и извлечь из нее данные.Я работаю в системе Ubuntu 18.04 с установленным репозиторием Anaconda и хотел бы использовать Python 3.6.

Я нашел способ извлечения данных из БД с помощью пакета python-sybase, но он зависит от python 2.7 и, как я сейчас, уже устарел.

import Sybase

db = Sybase.connect(dsn = server:port, user = usr, passwd = pwd, database = db)
c = db.cursor()
c.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
list1 = c.fetchall()
print list1

Вывод этого скрипта выглядит примерно так:

[(10.8, 100, 0), (11.2, 100, 5), (11.3, 100, 10), ..., ..., ...]

Я попытался использовать пакет te pymssql, который совместим с python 3.x.

import pymssql
conn = pymssql.connect(server=serv:port,user=usr,password=pwd,database=db)
print(conn)
cursor = conn.cursor()
cursor.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
list2 = cursor.fetchall()
print(list2) 

Но получите следующеесообщение об ошибке, уже после попытки подключения к базе данных, так как оно не выполняет print (conn):

Traceback (most recent call last):
File "src/pymssql.pyx", line 636, in pymssql.connect
File "src/_mssql.pyx", line 1957, in _mssql.connect
File "src/_mssql.pyx", line 707, in _mssql.MSSQLConnection.__init__
_mssql.MSSQLDriverException: Could not set connection properties

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/progs/Test_SYBASE.py", line 9, in <module>
conn =  pymssql.connect(server=serv,user=usr,password=pwd,database=db,port=prt)
File "src/pymssql.pyx", line 645, in pymssql.connect
pymssql.InterfaceError: Could not set connection properties

Так что моя проблема на самом деле касается самого соединения.

Я читал об этом сообщении об ошибке в руководстве по pymssql, но не знаю, как с этим справиться.

исключение _mssql.MSSQLDriverException MSSQLDriverException вызывается всякий раз, когда в _mssql возникает проблема -например, недостаточно памяти для структур данных и т. д.

исключение pymssql.InterfaceError
Возникает при ошибках, связанных с интерфейсом базы данных, а не самой базой данных.Подкласс Error.

У вас есть какие-либо предложения, как справиться с этим?

Спасибо за помощь!

1 Ответ

0 голосов
/ 04 октября 2018

Нашел решение моей проблемы: по предложению @GordThompson я использовал pyodbc и FreeTDS для подключения.Я установил драйвер FreeTDS через

sudo apt-get install freetds-dev freetds-bin unixodbc-dev tdsodbc
sudo dpkg-reconfigure tdsodbc

, как предложено здесь: https://gist.github.com/rduplain/1293636

Мой код для подключения выглядит так:

import pyodbc
serv = server
usr = user 
passwd = password
db = database
prt = port
driver="FreeTDS"

conn = pyodbc.connect(driver=driver, server=serv, database=db,port = prt,
                  uid=usr, pwd=passwd)
print(conn)
cursor = conn.cursor()
cursor.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
row = cursor.fetchall()
print(row)

РЕДАКТИРОВАТЬ: используя conn_properties ='' в моем вызове pymssql.connect () также работает, как и предложил @GordThompson.

import pymssql
conn =pymssql.connect(server=serv:port,user=usr,password=pwd,database=db, conn_properties='')
print(conn)
cursor = conn.cursor()
cursor.execute("select var1,var2,var3 from xxx where datum=1yymmdd and statnr=stat1")
list2 = cursor.fetchall()
print(list2)

Спасибо за вашу помощь!

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