首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用通配符的Psycopg2会导致TypeError

使用通配符的Psycopg2会导致TypeError
EN

Stack Overflow用户
提问于 2010-10-16 00:40:00
回答 2查看 9.3K关注 0票数 7

目前,我正在尝试搜索数据库以获取某些事件。我的问题是这样的

代码语言:javascript
运行
复制
SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > '2010-10-01'

简单地说,我需要查询来查找日历事件的数据库,并返回带有“test”的摘要的任何内容,并且在本月初之后。

这将在从数据库命令行查询时返回预期的结果。但是,当我尝试在Python脚本和psycopg2中使用它时,如下所示:

代码语言:javascript
运行
复制
cursor.execute("SELECT * FROM events WHERE summary ILIKE E'%test%' AND start_time > %(begin)s ", {'begin' : datetime.datetime(2010,10,1) })

我得到一个类型错误

代码语言:javascript
运行
复制
*** TypeError: 'dict' object does not support indexing

做一些初始的谷歌搜索,这听起来像是我使用通配符的方式。不过,我可能错了,我可能遗漏了一些我看不到的简单东西。希望来自社区的一双新鲜的眼睛能纠正我的傲慢;)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-16 00:58:48

我不确定这是否是问题的全部根源,但我认为您需要转义通配符,否则参数化逻辑将会被混淆。

代码语言:javascript
运行
复制
SELECT * FROM events WHERE summary ILIKE E'%%test%%' AND start_time > %(begin)s 

我认为%%是正确的转义,但也可能是\%

票数 23
EN

Stack Overflow用户

发布于 2011-06-16 04:20:53

我猜你的“%”是令人困惑的python.。在psycopg2中,我像这样做我的通配符" like“查询:

代码语言:javascript
运行
复制
#!/usr/bin/python

import sys,os.path,psycopg2
db=psycopg2.connect("dbname=music")

for line in sys.argv[1::]:
    cursor=db.cursor()
    key="%"+line+"%"
    cursor.execute("select count(*) from pool where path like %s",(key,))
    if cursor.fetchone()[0] != 1:
        sys.stderr.write("ambiguous stem or no such song")
        sys.exit(-1)
    cursor.execute("insert into spool select path from pool where path like %s",(key,))
    cursor.close()
    db.commit()
db.close()

使用用户提供的搜索字符串(如此脚本中的),您可能希望转义其中的任何“%”,否则我怀疑它们将是查询中的合法通配符,但我还没有做到这一点

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3944276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档