Python TypeError:' datetime.datetime'对象不可订阅

时间:2015-09-25 16:40:10

标签: python datetime

我在python脚本中有一个查询,它连接到sql数据库并检索相应行的(datetime,Id)对。我需要遍历结果集并过滤掉' datetime'和' Id'部分分开。 我的意图是得到“我是谁”。对于每一行。所以在下面的查询中我需要过滤掉" 275" (见下文)

编写此脚本时:

cursor2.execute(query2, [item[0]])
values = cursor2.fetchone() 
#values now equals = (datetime.datetime(2015, 7, 22, 17, 17, 36), 275)
print(values[0][1])

我收到此错误:

  

TypeError:' datetime.datetime'对象不可订阅

我尝试将值转换为列表/字符串对象,但到目前为止还没有任何工作。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

如果您只是想获得完整的datetime对象,则只需使用values[0],而不是values[0][0]。并Id使用values[1]。示例 -

>>> values = (datetime.datetime(2015, 7, 22, 17, 17, 36), 275)
>>> print(values[1])
275

values[0]引用datetime对象,所以当你执行values[0][1]时,你试图在datetime对象上使用下标,这是不可能的,因此也就是错误。< / p>

这是因为您使用cursor.fetchone(),它只返回一行作为元组。如果您使用.fetchall().fetchmany(),那么您获得的将是元组列表,在这种情况下,您可以迭代列表,一次取一个元组,然后获取索引1处的元素。示例 -

for dateobj, id in cursor.fetchall():
    #Do your logic with `id`.

答案 1 :(得分:1)

当你致电.fetchone()时,你会收到一个元组(一条记录):

mydate, myid = cursor.fetchone()

如果您只想为每行获取id

ids = [record[1] for record in cursor.fetchall()]
通常,最好只选择您需要的数据,可能是:

cursor.execute("select id from ({subquery}) t".format(subquery=query2), [item[0]])   # assuming the id column is named id
ids = [record[0] for record in cursor.fetchall()]  # now we're only retrieving one column (index zero)

答案 2 :(得分:1)

要获得275,你只需要

print(values[1])

假设

values == (datetime.datetime(2015, 7, 22, 17, 17, 36), 275)