Python 将PostgreSQL的整数转换为日期

Python 将PostgreSQL的整数转换为日期,python,postgresql,date,Python,Postgresql,Date,我尝试使用以下函数从PostgreSQL表中选择特定日期: cur.execute(""" SELECT * FROM posting_log WHERE hol_date = {}""".format(condition)) 但是,当我运行此程序时,我会收到以下跟踪: psycopg2.ProgrammingError:运算符不存在:日期=整数 第1行:从过账日志中选择*,其中过账日期=2018-10-10 提示:没有与给定名称和参

我尝试使用以下函数从PostgreSQL表中选择特定日期:

cur.execute(""" SELECT * FROM posting_log WHERE hol_date = {}""".format(condition))
但是,当我运行此程序时,我会收到以下跟踪:

psycopg2.ProgrammingError:运算符不存在:日期=整数

第1行:从过账日志中选择*,其中过账日期=2018-10-10

提示:没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换

该函数显然正在提取我想要检查的日期,但是认为它是一个整数,无法将其转换为日期格式。我能做些什么来解决这个问题

我尝试了answer提供的以下解决方案,但这只是抛出一个错误,表示函数date和to_date不存在:

SELECT date(condition::TEXT)
SELECT to_date(condition::text, 'YYYY-MM-DD')

这一点我再强调也不过分,不要使用幼稚的模板变量,总是使用“你”参数。这意味着让经过良好测试的软件处理将变量插入SQL查询的操作。这是为了防止SQL注入。最好总是这样做,这样你就不会忘记关键时刻

不管怎么说,你看到的问题是,你的手工方式不包括日期前后的单引号。正在运行的查询是:

SELECT * FROM posting_log WHERE hol_date = 2018-10-10
。。。而您想要的是:

SELECT * FROM posting_log WHERE hol_date = '2018-10-10'
快速、安全地执行此操作的一种方法如下:

args = ['2018-10-10']
cur.execute("""SELECT * FROM posting_log WHERE hol_date = %s""", args)

这应该添加必要的单引号,并将自动“mogrify”您的参数。

日期值必须在单引号中:
SELECT*FROM posting\u log WHERE holu date='2018-10-10'
完成了,我添加了{}的任意一边。感谢您的帮助。不要对参数使用字符串格式-这会导致SQL注入攻击。想象一下,如果某个恶意参与者将
condition=“0;DROP TABLE posting_log;”“
。(想象一下,不要尝试)。改为使用参数化查询,该查询应简单到:
cur.execute(““从日志中选择*,其中hol\u date=%s”“”,条件)
。编辑:必须。@LaurieBamber请不要做eurotrash建议的事。按照pault的建议使用参数化查询是正确的做法,除非您有非常具体的需求,并且您已经验证了
条件的内容,这样您就不会遭受注入攻击