gpt4 book ai didi

python - 从 SQL 数据库读取二进制数据(图像数据类型)并对其进行扩充,Matlab 与 Python

转载 作者:行者123 更新时间:2023-11-30 23:44:50 25 4
gpt4 key购买 nike

完整编辑:

我迫切需要访问 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 中检索整数数组?

我在 Windows XP 上使用 Python 2.7.2、pyodbc 3.0.5 和 Matlab R2011b。

最佳答案

听起来您想将内容解压为无符号 16 位整数?

所以,你有这样的东西:

bytearray(b'\x01\x00\x02\x00\x03\x00\x04\x00')

你想要:

[1, 2, 3, 4]

如果是这样,您有多种选择。

如果您无论如何都要使用 numpy,请考虑使用 numpy。

import numpy as np
dat = bytearray(b'\x01\x00\x02\x00\x03\x00\x04\x00')
data = np.frombuffer(buffer(dat), dtype=np.uint16)

或者,您可以使用 python 的内置 array 执行类似的操作:

import array
dat = bytearray(b'\x01\x00\x02\x00\x03\x00\x04\x00')
data = array.array('H')
data.fromstring(buffer(dat))

您还可以使用 struct 模块,但对于像这样的重复数据来说,它不太理想。

关于python - 从 SQL 数据库读取二进制数据(图像数据类型)并对其进行扩充,Matlab 与 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9903656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com