在由句子组成的列中搜索单词

2024-07-02 09:30:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在JetBrains PyCharm社区版4.0.4中使用SQLite3和python

我有一张这样的桌子。ID是整数,名称和内容是文本

ID Name Content
1  Matt oirefasd aifsfnib if ib @John sefuhrg wefirwgf
2  John sdfwre frwgfwg wegfhtr @Patsfrwg
3  Pat  asjgre wurgjnsow wouregjeo @Johnsfbwufaeovnwo
4  John sfgoe eriogner weogfib

我的问题是, 假设用户John已登录。如何编写sqlite查询,以便在内容列中接收包含以@symbol开头、后跟登录用户(John)的消息的行

我应该以元组的形式接收答案

所以解决办法应该是:

ID Name Content
1  Matt oirefasd aifsfnib if ib @John sefuhrg wefirwgf
3  Pat  asjgre wurgjnsow wouregjeo @Johnsfbwufaeovnwo 

这是我当前的sql查询。currentuser存储当前登录用户的名称(本例中为John)

str = '%'+ currentuser + '%'
c = db.cursor()
sql = "SELECT id, Name, content FROM myusers WHERE myusers.content LIKE ? LiMIT ?"
c.execute(sql,(str,limit))
return [x[0] for x in c]

我一直收到一个错误,上面写着“int”对象不可下标

上面的代码正在根据我的单元测试语句进行测试。此声明是:

self.assertListEqual([1, 3], [a[0] for a in posts])

Tags: 用户name名称id内容sqlifmatt
2条回答

如果你仔细看,我被要求返回元组。 以及 如果您查看单元测试语句assertListEqual([1, 3], [a[0] for a in posts]),这意味着您正在比较两个列表的值

因此,解决方案在于随问题提供的代码

而不是用这个

return [x[0] for x in c]

返回每行的第一个元素。我用这句话:

return [x for x in c]

返回元组

现在,当assert语句应用于返回两个元组的a[0]元素的元组时,在本例中它是[1,3]。测试通过了

你的问题是这样的:

self.assertListEqual([1, 3], [p[0] for p in posts]) 

你给我们看的代码里都没有。但是可以想见,posts是问题代码返回的列表。而posts是一个整数列表,就像[1, 3],所以每个p都是一个整数,所以每个p[0]都会引发一个异常,因为你要求的是1[0],这毫无意义

我想你只是想要assertListEqual([1, 3], posts)

相关问题 更多 >