如何使用pyodbc从PHD中提取整数值?

2024-10-03 23:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python3.x连接到霍尼韦尔博士服务器并提取数据。我正在连接以下语法:

import pyodbc
import pandas as pd
import numpy as np
connstring = str('Driver={PHD Server x64}; Server=xxx')
conn = pyodbc.connect(connstring, autocommit=True)
cursor = conn.cursor()
query = "SELECT value FROM phd_data where tagno = '36012' \
        and start_timestamp = 'NOW-::1'"
df = pd.read_sql_query(query,conn)
struct.unpack('f',df.loc[0,'VALUE'][:4])[0]

这对于标签号36012(和许多其他标签)来说效果很好,因为它们的数据类型是Float。表PHD_DATA中的值列返回一个包含4096字节的字节字符串。大多数字节是\x00,但其中混合了一些与python相关的常规文本,请参见以下内容:

b'\xd4]\xf0CD\x00 \x00W\x00r\x00i\x00t\x00e\x00 \x00D\x00a\x00t\x00a\x00 \x00T\x00a\x00b\x00l\x00e\x00\x00\x00t\x00i\x00o\x00n\x00 \x00T\x00a\x00b\x00l\x00e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00.\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x014\x00\xb1\xff\x8ah\xd7\x01\xc1\x91\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00j\x00s\x00o\x00n\x00.\x00p\x00y\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01du\xb1\xff\x8ah\xd7\x01\x0b1\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00n\x00o\x00r\x00m\x00a\x00l\x00i\x00z\x00e\x00.\x00p\x00y\x00\x80\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\xf7\xe9\xb1\xff\x8ah\xd7\x01D(\x00\x00\x00\x00\x00\x00\x000\x00\x00\x00\x00\x00\x00 \x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00t\x00a\x00b\x00l\x00e\x00_\x00s\x00c\x00h\x00e\x00m\x00a\x00.\x00p\x00y\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\xfe\x1b\xae\xff\x8ah\xd7\x01T\x01\x00\x00\x00\x00\x00\x00X\x01\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00_\x00i\x00n\x00i\x00t\x00_\x00_\x00.\x00p\x00y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xbd{\xfe\x8ah\xd7\x01\x9a\xe8\xd1\xe6\x18\xb0\xd7\x01]d\xb0\xff\x8ah\xd7\x01]d\xb0\xff\x8ah\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x10\x00_\x00_\x00P\x00Y\x00C\x00A\x00~\x001\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00_\x00p\x00y\x00c\x00a\x00c\x00h\x00e\x00_\x00_\x00\x00\x00\x00\x00\xaa\xa7u\xfe\x8ah\xd7\x01g\x04\xcf\xe6\x18\xb0\xd7\x01\'~\x05\xff\x8ah\xd7\x01\'~\x05\xff\x8ah\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x10\x00_\x00_\x00P\x00Y\x00C\x00A\x00~\x001\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00_\x00p\x00y\x00c\x00a\x00c\x00h\x00e\x00_\x00_\x00\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\xa7\x10\x9d\xff\x8ah\xd7\x01\xdf\x0e\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00 \x00\x00\x00"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00f\x00e\x00a\x00t\x00h\x00e\x00r\x00_\x00f\x00o\x00r\x00m\x00a\x00t\x00.\x00p\x00y\x00p\x00\x00\x00\x00\x00\x00\x00\x14"{\xfe\x8ah\xd7\x01\xbe\x9a\xd1\xe6\x18\xb0\xd7\x01zH\xac\xff\x8ah\xd7\x01zH\xac\xff\x8ah\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00f\x00o\x00r\x00m\x00a\x00t\x00s\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01D\x0b\xad\xff\x8ah\xd7\x01\xf7\x1f\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00 \x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00g\x00b\x00q\x00.\x00p\x00y\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01.\x80\xad\xff\x8ah\xd7\x01=\x87\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00h\x00t\x00m\x00l\x00.\x00p\x00y\x00\x00\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x00\'\x97{\xfe\x8ah\xd7\x01\x9e\xc1\xd1\xe6\x18\xb0\xd7\x01\xf7\xe9\xb1\xff\x8ah\xd7\x01\xf7\xe9\xb1\xff\x8ah\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00j\x00s\x00o\x00n\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\xd6^\xb2\xff\x8ah\xd7\x01n\x06\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00o\x00r\x00c\x00.\x00p\x00y\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\xb1\xfa\xb2\xff\x8ah\xd7\x01\xe5>\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x00a\x00r\x00q\x00u\x00e\x00t\x00.\x00p\x00y\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\x80\xbd\xb3\xff\x8ah\xd7\x01A"\x02\x00\x00\x00\x00\x00\x000\x02\x00\x00\x00\x00\x00 \x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x00a\x00r\x00s\x00e\x00r\x00s\x00.\x00p\x00y\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01Q2\xb4\xff\x8ah\xd7\x01\xa3\x1b\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00 \x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x00i\x00c\x00k\x00l\x00e\x00.\x00p\x00y\x00x\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01<\x80\xb4\xff\x8ah\xd7\x01\xf3\x8c\x02\x00\x00\x00\x00\x00\x00\x90\x02\x00\x00\x00\x00\x00 \x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00p\x00y\x00t\x00a\x00b\x00l\x00e\x00s\x00.\x00p\x00y\x00\x00\x00\x00\x00h\x00\x00\x00\x00\x00\x00\x00\xe5\xe4{\xfe\x8ah\xd7\x01\x9a\xe8\xd1\xe6\x18\xb0\xd7\x01\xc9\xfa\xb9\xff\x8ah\xd7\x01\xc9\xfa\xb9\xff\x8ah\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00a\x00s\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\x9ao\xba\xff\x8ah\xd7\x01\xe7\x04\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00p\x00s\x00s\x00.\x00p\x00y\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01z\x0b\xbb\xff\x8ah\xd7\x01\x83\xfa\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00 \x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00q\x00l\x00.\x00p\x00y\x00\x00\x00\x00\x00\x00\x00p\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01R\x80\xbb\xff\x8ah\xd7\x01\xaa\xea\x01\x00\x00\x00\x00\x00\x00\xf0\x01\x00\x00\x00\x00\x00 \x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00s\x00t\x00a\x00t\x00a\x00.\x00p\x00y\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00\x80\xeb\xf0m\x8ah\xd7\x01\x80\xeb\xf0m\x8ah\xd7\x01\x80\x8cb\xc3\xd20\xd7\x01\x9f\x1d\x84\xff\x8ah\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00_\x00i\x00n\x00i\x00t\x00_\x00_\x00.\x00p\x00y\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00I_z\xfe\x8ah\xd7\x01\x9e\x0f\xd2\xe6\x18\xb0\xd7\x01\xdd\xff\x8d\xff\x8ah\xd7\x01\xdd\xff\x8d\xff\x8ah\xd7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x10\x00_\x00_\x00P\x00Y\x00C\x00A\x00~\x001\x00\x00\x00\x00\x00\x00\x00\x00\x00_\x00_\x00p\x00y\x00c\x00a\x00c\x00h\x00e\x00_\x00_\x00 0])\n    >>> mask_zero_div_zero(x, y, result)\n    array([ inf,  nan, -inf])\n    r\x01\x00\x00\x00\xda\x06ignore)\x01Z\x07invalidr\n\x00\x00\x00Fr\x0b\x00\x00\x00)\x0c\xda\nisinstancer\x0e\x00\x00\x00Z\x07ndarrayr\x04\x00\x00\x00r\x0f\x00\x00\x00\xda\x04boolr\x10\x00\x00\x00Z\x07signbitZ\x08errstater\x12\x00\x00\x00r\x13\x00\x00\x00\xda\x03inf)\tr\x15\x00\x00\x00r\x16\x00\x00\x00r\x14\x00\x00\x00Z\x05zmaskZ\tzneg_maskZ\tzpos_maskZ\x08nan_maskZ\x0bneginf_maskZ\x0bposinf_maskr\x18\x00\x00\x00r\x18\x00\x00\x00r\x19\x00\x00\x00\xda\x12mask_zero_div_zeroI\x00\x00\x00s(\x00\x00\x00\x00\x1c\x0c\x02\x04\x02\x08\x01\n\x02\x08\x02\n\x02\x04\x02\x08\x03\x0e\x01\n\x02\x0c\x01\x0e\x01\x18\x01"\x02\x18\x02\x0e\x02\n\x01\n\x01\x0c\x02r\x1f\x00\x00\x00c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00C\x00\x00\x00s\xb2\x00\x00\x00|\x00t\x00k\x08r*t\x01|\x01|\x02|\x03d\x01\x19\x00\x83\x03t\x02|\x03d\x02\x19\x00|\x01|\x02\x83\x03f\x02}\x03n\x84|\x00t\x03k\x08rTt\x01|\x02|\x01|\x03d\x01\x19\x00\x83\x03t\x02|\x03d\x02\x19\x00|\x02|\x01\x83\x03f\x02}\x03nZ|\x00t\x04j\x05k\x08rlt\x01|\x01|\x02|\x03\x83\x03}\x03nB|\x00t\x06k\x08r\x82t\x01|\x02|\x01|\x03\x83\x03}\x03n,|\x00t\x04j\x07k\x08r\x9at\x02|\x03|\x01|\x02\x83\x03}\x03n\x14|\x00t\x08k\x08r\xaet\x02|\x03|\x02|\x01\x83\x03}\x03|\x03S\x00)\x03a\x05\x02\x00\x00\n    Call fill_zeros with the appropriate fill value depending on the operation,\n    with special logic for divmod and rdivmod.\n\n    Parameters\n    ----------\n    op : function (operator.add, operator.div, ...)\n    left : object (np.ndarray for non-reversed ops)\n    right : object (np.ndarray for reversed ops)\n    result : ndarray\n\n    Returns\n    -------\n    result : np.ndarray\n\n    Notes\n    -----\n    For divmod and rdivmod, the `result` parameter and returned `result`\n    is a 2-tuple of ndarray objects.\n    r\x01\x00\x00\x00\xe9\x01\x00\x00\x00)\t\xda\x06divmodr\x1f\x00\x00\x00r\x1a\x00\x00\x00r\x05\x00\x00\x00\xda\x08operator\xda\x08floordivr\x06\x00\x00\x00\xda\x03modr\x07\x00\x00\x00)\x04\xda\x02op\xda\x04left\xda\x05rightr\x14\x00\x00\x00r\x18\x00\x00\x00r\x18\x00\x00\x00r\x19\x00\x00\x00\xda\x13dispatch_fill_zeros\x88\x00\x00\x00s"\x00\x00\x00\x00\x15\x08\x02\x0e\x01\x0e\xfe\x06\x04\x08\x02\x0e\x01\x0e\xfe\x06\x04\n\x03\x0e\x01\x08\x03\x0e\x01\n\x01\x0e\x01\x08\x01\x0c\x01r(\x00\x00\x00)\x0f\xda\x07__doc__r"\x00\x00\x00Z\x05numpyr\x0e\x00\x00\x00Z\x19pandas.core.dtypes.commonr\x02\x00\x00\x00r\x03\x00\x00\x00r\x04\x00\x00\x00Z\x19pandas.core.ops.roperatorr\x05\x00\x00\x00r\x06\x00\x00\x00r\x07\x00\x00\x00r\x1a\x00\x00\x00r\x1f\x00\x00\x00r(\x00\x00\x00r\x18\x00\x00\x00r\x18\x00\x00\x00r\x18\x00\x00\x00r\x19\x00\x00\x00\xda\x08<module>\x01\x00\x00\x00s\x0e\x00\x00\x00\x04\x17\x08\x02\x08\x02\x14\x02\x14\x03\x08(\x08?\x01\x00\x00f\x01|\x03\x00\x00'

上面还要注意的是,有一种模式可以获得\x00p\x00y\x00c,例如,如果删除\x00,则会得到.pycache字符串和对pyp包的引用等

所以对于tagno 36012,我提取了前4个字节,并将它们解压为一个浮点,这很好。我遇到的问题是,在不同的tagno 36964上尝试相同的查询时,该标记的数据类型为integer,我的python内核将死亡。我能够做到这一点:

query = "SELECT value FROM phd_data where tagno = '36964' \
        and start_timestamp = 'NOW-::1'"
cursor.execute(query)

但一旦我试图从游标中获取行,内核就会思考并死亡。我知道这个标签上有数据,因为我有另一个使用不同接口的程序。我能够查询浮点和Unicode类型的标记,但不能查询整数。我可以从此标记号中选择其他列,如标记名、标记号、时间戳,但不能选择值

我的第一个问题是我的连接方式是否有问题

第二,为什么我得到一个长字节字符串,而只有前4个字节是值本身

第三,为什么整数数据类型会失败,而浮点类型不会

最后-是否有一种方法可以仅从PHD_DATA.VALUE中选择前4个字节


Tags: x00x01x02xffx00tx00ax00sx00r