我有多个元素的列表,例如:
l=['asia','america','africa','australia'].
我有mysql表,我想统计所有列中所有单词的出现,因此,例如,如果asia
是我要检查计数的单词,那么我使用了:
cursor.execute("select count(*)from table_text where round(match(text) against('asia'),5)")
cursor.fetchall()
,我算为48
。如何将所有列表元素作为参数传递到cursor.execute
中并同时计算所有单词?
我做了一些事情:-
for i in l:
cursor.execute("select count(*)from table_text where round(match(text) against('"i"'),5)")
cursor.fetchall()
那是一个错误!!
答案 0 :(得分:1)
只需对字符串使用+
运算符。因此,您可以执行以下操作:-
list_new=[]
for words in l:
cursor.execute("select count(*)from table_text where round(match(text) against('"+words+"'),5)")
tagg=cursor.fetchall()
for i in tagg[0]:
list_new.append(i)
print (list_new) #Gives you list of counts of all elements
希望有帮助!!!!
答案 1 :(得分:-1)
我不确定您要使用该查询做什么。我看到一些错误:
select count(*)from table_text where round(match(text) against('"i"'),5)
首先在count和from之间添加一个空格
第二个条件是'((“ i”'))匹配(text)才有意义,但是round函数的目的是什么?
最后,要使用诸如count之类的聚合函数,最后需要一个groupby。
我认为您可以在条件中使用空格来匹配单词之一。像这样:
conditions = '"' + ' '.join(l) + '"'
# conditions = '"asia america africa australia"'
query = 'SELECT count(*) FROM table_text WHERE MATCH(text) AGAINST(' + conditions + ' IN BOOLEAN MODE)'
还要小心使用引号和双引号。 l的元素具有简单的引号,而您的查询使用双引号。