如何从pyodbc查询的结果创建NumPy数组?

时间:2017-05-23 15:34:32

标签: python numpy tuples pyodbc

我想根据从SQL查询中提取的值创建数组或列表。从研究中我相信我从SQL中提取的数据是一个元组。

如何将数据格式化为我可以在python中使用的列表?

在我当前的代码中,我尝试使用numpy命令np.asarray。我不确定numpy数组是否允许datetime。

import numpy as np
import pyodbc

conn = pyodbc.connect('login')
cursor = conn.cursor()
cursor.execute("SELECT PTIME, PVALUE FROM HISTORY_TABLE WHERE POINT = 'Value' AND PTIME> '2017-04-12' AND PTIME<'2017-04-13' AND HISTTYPE='AVG' AND PERIOD=7200")

sample = cursor.fetchall()
rockin = np.asarray(sample)
print rockin

cursor.close()
conn.close()

我的结果如下:

[[datetime.datetime(2017, 4, 12, 0, 0) 232.83]
 [datetime.datetime(2017, 4, 12, 2, 0) 131.49]
 [datetime.datetime(2017, 4, 12, 4, 0) 36.67]
 ..., 
 [datetime.datetime(2017, 4, 12, 18, 0) 82.08]
 [datetime.datetime(2017, 4, 12, 20, 0) 368.83]
 [datetime.datetime(2017, 4, 12, 22, 0) 435.79]]

1 个答案:

答案 0 :(得分:1)

  

从研究中我相信我从SQL中提取的数据是一个元组。

不完全是。 pyodbc的fetchall()方法不返回元组列表,它返回pyodbc.Row个对象的列表:

>>> rows = crsr.execute("SELECT 1 AS foo UNION ALL SELECT 2 AS foo").fetchall()
>>> rows
[(1, ), (2, )]
>>> type(rows[0])
<type 'pyodbc.Row'>

np.asarray可能不知道如何处理pyodbc.Row个对象。如果要将每一行转换为实际元组,可以使用

>>> rows_as_tuples = [tuple(x) for x in rows]
>>> rows_as_tuples
[(1,), (2,)]
>>> type(rows_as_tuples[0])
<type 'tuple'>