在数据库中搜索包含字符串变量的元素

时间:2013-10-05 03:26:02

标签: python sqlite

我对SQLite和Python很陌生,并且遇到了一些混乱。我试图返回包含子串的列中的所有元素,子串在Python中作为变量传递给函数。我的代码正在运行,但它返回的是空结果,而不是正确的结果。

以下是具有通用名称的代码:

def myFunc(cursor,myString):
    return cursor.execute("""select myID from Column where name like '%'+?'%' """,(myString,))

就像我说的那样,代码确实运行没有错误但是返回一个空结果而不是我知道应该是的结果。我假设它与我使用通配符和/或问号有关,但我不能确定。有人有主意吗?在此先感谢您的时间/帮助!另外,这是我的第一篇文章,所以如果我错过任何推荐的提问方案,我会提前道歉。

2 个答案:

答案 0 :(得分:1)

好吧,'%'+?'%'肯定无法正常工作 - 你试图与左边的+连接,但没有操作符......

如果你做得对,你可以计算LIKE - 搜索字段 - '%'+?+'%',在这种情况下。这会导致某些数据库出现问题(从不工作到搜索效率较低),但至少根据CL。的评论,sqlite3会很好。

但最简单的方法就是替换一个完整的参数,而不是一个参数的一部分。您可以将%放入参数中,它将被解释得很好。所以:

return cursor.execute("""select myID from Column where name like ?""",
                      ('%'+myString+'%',))

这也有一个好处,如果你想搜索初始子串('foo%'),它将是相同的SQL语句,但具有不同的参数。

答案 1 :(得分:-2)

试试这个:

def myFunc(cursor,myString):
    return cursor.execute('select myID from Column where name like "{0}"'.format(myString))