我想根据从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]]
答案 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'>