我正在尝试使用以下功能从PostgreSQL表中选择特定日期:
cur.execute(""" SELECT * FROM posting_log WHERE hol_date = {}""".format(condition))
但是,运行此命令时,会收到以下跟踪:
psycopg2.ProgrammingError:运算符不存在:date =整数
第1行:选择*来自发帖日志hol_date = 2018-10-10
提示:没有运算符匹配给定的名称和参数类型。您可能需要添加显式类型转换。
该函数显然正在获取我要检查的日期,但是认为它是整数并且无法将其转换为日期格式。我该怎么解决?
我已经尝试过this答案提供的以下解决方案,但是这只是抛出一个错误,指出函数date和to_date不存在:
SELECT date(condition::TEXT)
SELECT to_date(condition::text, 'YYYY-MM-DD')
答案 0 :(得分:0)
我对此不够强调,不要使用幼稚的模板变量,而总是使用“ mogrify”作为参数。这意味着让经过良好测试的软件处理将变量插入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)
这应该添加必要的单引号,并将自动“迁移”您的论点。