'How do I extract integer values from PHD using pyodbc?

I am trying to connect to a Honeywell PHD server using Python 3.x and extract data. I am connecting with this syntax:

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]

This works fine for the tag number 36012 (and many others) as their data type is Float. The VALUE column in the table PHD_DATA returns a byte string with 4096 bytes. Most of the bytes are \x00 but there is some regular text mixed in that seems to relate to python, see below:

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'

Note above too that there is a pattern where you get \x00p\x00y\x00c for example, if you remove the \x00's you end up with .pycache strings and references to pyp packages etc.

So for the tagno 36012 I'm extracting the first 4 bytes and unpacking them as a float, which works fine. The problem I'm having is when trying the same query on a different tagno 36964 that has a data type of integer my python kernel dies. I am able to do this:

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

but as soon as I try to fetch rows from the cursor the kernel thinks and dies. I know there is data on this tag as I have another program that uses a different interface. I am able to query tags with Float and Unicode types, but not Integers. I can SELECT other columns like Tagname, Tagno, Timestamp from this Tagno, but just not Value.

My first question is whether there's anything wrong with my connection approach?

Secondly - why am I getting a long byte string when only the first 4 bytes are the value itself?

Thirdly - why would Integer data types fail when Float types don't?

Lastly - is there maybe a way I can Select only the first 4 bytes from PHD_DATA.VALUE maybe?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source