【发布时间】:2019-07-19 20:39:24
【问题描述】:
我正在尝试从我的数据库中提取数据并以格式正确的形式显示。
当 db 给我日期时,我试图以字符串“日/月/年”的形式显示它。我已经使用以下代码来执行此操作,但它给我带来了错误。
如何将列表转换为 date.time 对象?
import psycopg2
from datetime import datetime
db = psycopg2.connect("dbname=news")
if db:
print("DB CONNECTED")
c = db.cursor()
c.execute("select day from (select date(time) as day, count(id) as errors from log where status != '200 OK' group by day order by errors desc limit 1) as seq")
t = c.fetchall()
res = datetime.strftime(t,'%b %d, %Y')
print(res)
db.close()
TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'list'
【问题讨论】:
-
问题似乎是 t 不是您期望的那样。它可能是行结果列表。这意味着如果您将
res = datetime.strftime(t,'%b %d, %Y')更改为res = datetime.strftime(t[0],'%b %d, %Y'),此代码可能会起作用。尝试打印 t 并查看它是什么,如果您在问题中提供它会更容易提供帮助。 -
是的,我也试过了。它显示相同的 Typeerror 描述符“strftime”需要一个“datetime.date”对象但收到一个“元组”
-
好的,所以你从查询中得到了一个元组列表,很可能它是一个结合了行结果的行列表。如果您不打印变量 t 并向我们展示结果,这将是一个废话,您应该使用
print(t)的输出来编辑您的任务。话虽这么说,datetime.strftime(t[0][0],'%b %d, %Y')可能会起作用,但如果你不分享print(t)的输出,那么这里很难为你提供帮助! -
但通常你不会像这样使用
strftime;这是您在类实例上调用的方法,因此(一旦您为t获得正确的对象)您将执行t.strftime('%b %d, %Y")。 -
是的,它成功了,非常感谢!
标签: python database postgresql datetime