ПОЛНОЕ РЕДАКТИРОВАНИЕ:
Мне срочно нужно получить доступ к Microsoft SQL Server и прочитать сжатые данные с него, делая это с помощью Python. После многих проблем я наконец нашел работающую реализацию Matlab, которая делает свою работу. Однако мне это нужно в Python.
Данные хранятся в типе данных изображения и должны быть распакованы после загрузки.
Это работает код Matlab (используя подпрограммы Java), чтобы сделать работу:
connection = actxserver('ADODB.Connection');
conString = 'Provider=SQLOLEDB; Data Source=adress.to.server; Integrated Security=SSPI; Initial Catalog=';
connection.ConnectionString = conString;
connection.CursorLocation = 'adUseClient';
connection.Open();
query_string = 'select Zip from Database where DatabaseName=''foo'' and Item=''bar'' ';
return = connection.Execute(query_string);
row = return.GetRows();
data = row{1};
class(data) % returns uint8
a = java.io.ByteArrayInputStream(data);
b = java.util.zip.InflaterInputStream(a);
isc = com.mathworks.mlwidgets.io.InterruptibleStreamCopier.getInterruptibleStreamCopier();
c = java.io.ByteArrayOutputStream;
isc.copyStream(b,c);
result = typecast(c.toByteArray,'uint16');
result
теперь содержит массив целых чисел, которые являются несжатыми желаемыми данными. Я хотел бы добиться того же, используя Python. Вот код, который я использую для извлечения данных:
import pyodbc
connect = pyodbc.connect(Driver="SQL Server", Server="address.to.server")
cursor = connect.cursor()
cursor.execute("select Zip from database where DatabaseName='foo' and Item='bar'")
row = cursor.fetchone()
data = row[0]
type data # returns <type 'bytearray'>
Теперь, как мне накачать этот байт-массив? Я пытался
zlib.decompress(io.BytesIO(data).read())
, который возвращает байтовый массив правильной длины, но мне нужен массив целых чисел, которые возвращаются приведенным выше кодом Matlab. Я попытался декодировать сжатый и раздутый байт-массив, но безуспешно.
Есть ли разница в том, как Matlab и pyodbc обрабатывают тип данных изображения в SQL? Как я могу получить массив целых чисел в Python?
Я использую Python 2.7.2, pyodbc 3.0.5 и Matlab R2011b в Windows XP.