目前我正在尝试搜索数据库以获取某些事件。我的查询是这样Psycopg2使用通配符导致TypeError
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'
简单地说,我需要通过查询日历事件的数据库的外观和与它和本月初之后“测试”的总结返回任何东西。
这将返回从数据库命令行查询时的预期结果。然而,当我试图在我的Python脚本psycopg2使用它作为这样的:
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })
我得到一个错误类型
*** TypeError: 'dict' object does not support indexing
做一些初步的谷歌搜索听起来有点像与我使用的方法我的通配符。我可能是错的,但我可能错过了一些我看不到的东西。希望来自社区的新鲜眼睛可以纠正我的不好意思;)
嗯,确实解决这个问题。但是我不相信这是根本问题,因为我试图摆脱字典,只是在没有替换的情况下运行该行,以查看通配符是否确实没有被正确转义。摆脱字典的工作,为什么我需要在使用字典时逃避通配符? – 2010-10-15 17:55:54
底层参数替换使用'%'作为特殊字符,意思是'嘿,替代我的字典中的值在这里'。我的猜测是,如果你没有通过字典,这个参数化逻辑会被完全忽略掉,所以你没有机会被where子句中'%'的存在所困惑。换句话说,在参数化步骤中,您可能会窒息,而您不再这样做。所以,如果你传递参数,你需要转义特殊的%字符,否则不行。 – 2010-10-15 18:02:53
好吧,这是有道理的。谢谢你,先生! – 2010-10-15 18:05:09