Postgresql使用to_char将时间戳更改为YYYYMMDD,并通过Fastapi中的查询进行比较

lxkprmvk  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(195)

Postgresql使用to_char将时间戳更改为YYYYMMDD,并通过Fastapi中的查询进行比较
num变量已经是Int类型。

days = (datetime.datetime.now()).strftime("%Y%m%d")

ex = session.execute("""SELECT * FROM tb WHERE num = %d AND TO_CHAR(updated_at, 'YYYYMMDD') >= %s""", (num, days))

错误讯息
TypeError:'str'和'int'的示例之间不支持'<'
如何修改days变量?

z9smfwbn

z9smfwbn1#

您可以使用to_date()将该本地格式转换为db的常规date类型,而不是将db值转换为本地格式:

days = (datetime.datetime.now()).strftime("%Y%m%d")
ex = session.execute("""SELECT * 
                        FROM tb 
                        WHERE num = %d 
                        AND updated_at >= to_date(%s,'YYYYMMDD')
                     """, (num, days) )

如果您的数据库时间与客户端时间匹配,您也可以在查询中使用now(),而根本不必检查、格式化和从客户端传递它。
不过,您的消息似乎指向了其他地方,因为运算符<与查询中的>==不匹配,并且错误来自Python,而不是PostgreSQL。消息将有所不同,不匹配的类型将是text,而不是str

相关问题