gpt4 book ai didi

python - 类型错误 : 'datetime.datetime' object does not support indexing

转载 作者:行者123 更新时间:2023-11-29 14:27:50 25 4
gpt4 key购买 nike

在过去的 24 小时内,我很难从一个表中查询所有数据,而且很难说它是否是我的 python 部分的 postgres 错误,因为我是初学者

我看到“publishedAt”字段,返回一个 datetime.datetime 值。

# print out columns names
cur.execute(
"""
SELECT *
FROM "table"
LIMIT 1
"""
)

# print out columns names
colnames = [desc[0] for desc in cur.description]
print(colnames)

# print out col values
rows = cur.fetchall()
print(rows)

['id', 'publishedAt', ......]
[['5a086f56-d080-40c0-b6fc-ee78b08aec3d', datetime.datetime(2018, 11, 11,
15, 39, 58, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=0, name=None)), .....]

但是,

cur.execute(
"""
SELECT *
FROM "table"
WHERE publishedAt BETWEEN %s and %s;""",
(dt.datetime.now() - dt.timedelta(days=1))
)

结果:

TypeError: 'datetime.datetime' object does not support indexing

是否可以在 psycopg2 查询中使用日期时间库?

最佳答案

您想将一个元组传递给 cur.execute(),您传递的是单个值(这不同于包含单个值的“元组”)

还有,为什么不在 Postgres 中处理日期/时间呢,它非常擅长处理它。例如您的查询可能是这样的:

cur.execute("""SELECT * FROM "table" WHERE publishedAt > now() - interval '1 day'""")

否则你可以在数据库中进行日期计算:

cur.execute("""SELECT * FROM "table" WHERE publishedAt > %s - interval '1 day'""", (dt.datetime.now(),))

(注意末尾的额外逗号),或者用 Python 进行计算:

cur.execute("""SELECT * FROM "table" WHERE publishedAt > %s""", (dt.datetime.now() - dt.timedelta(days=1),))

如果你想要日期的上限,你可能想要做这样的事情:

now =  dt.datetime.now()
cur.execute("""SELECT * FROM "table" WHERE publishedAt BETWEEN %s AND %s""", (now - dt.timedelta(days=1), now))

(注意 Python 知道方括号表示一个元组,所以不需要尾随逗号)

关于python - 类型错误 : 'datetime.datetime' object does not support indexing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com