传递cursor.execute mysql查询中的元素列表

时间:2018-08-24 07:45:39

标签: python mysql python-3.x pymysql

我有多个元素的列表,例如:

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()

那是一个错误!!

2 个答案:

答案 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的元素具有简单的引号,而您的查询使用双引号。