2015-01-01 5 views
-1

Я читал главу о поисковых системах в программировании коллективного интеллекта и наткнулся на следующий фрагмент кода и попытался реализовать его в IPython. Однако я столкнулся с ошибкой. Пожалуйста, помогите.Какая ошибка в следующем фрагменте кода на python?

def getmatchrows(self,q): 
    fieldlist='w0.urlid' 
    tablelist='' 
    clauselist='' 
    wordids=[] 

    words=q.split() 
    tablenumber=0 

    for word in words: 
     wordrow=self.con.execute("select rowid from wordlist where word='%s'" % word).fetchone() 
     if wordrow!=None: 
      wordid=wordrow[0] 
      wordids.append(wordid) 
      if tablenumber>0: 
       tablelist+=',' 
       clauselist+=' and ' 
       clauselist+='w%d.urlid=w%d.urlid and '&(tablenumber-1,tablenumber) 
      fieldlist+=',w%d.location'%tablenumber 
      tablelist+='wordlocation w%d'%tablenumber 
      clauselist+='w%d.wordid=%d'%(tablenumber,wordid) 
      tablenumber+=1 
    fullquery="select %s from %s where %s"%(fieldlist,tablelist,clauselist) 
    cur=self.con.execute(fullquery) 
    rows=[row for row in cur] 
    return row,wordids 

я получил следующее сообщение об ошибке:

e.getmatchrows('the') 
--------------------------------------------------------------------------- 
OperationalError       Traceback (most recent call last) 
<ipython-input-4-65d6f760f6c8> in <module>() 
----> 1 e.getmatchrows('the') 

C:\Users\Blue\Anaconda\searchengine.py in getmatchrows(self, q) 
    134         tablenumber+=1 
    135     fullquery="select %s from %s where %s"%(fieldlist,tablelist,clauselist) 
--> 136     cur=self.con.execute(fullquery) 
    137     rows=[row for row in cur] 
    138     return row,wordids 

OperationalError: near "where": syntax error 

ответ

0

У вас ошибка SQL. Начните с правильного форматирования вашего SQL. Here is a quick tutorial. И вот синтаксическое изменение, которое я сделал бы первым.

fullquery="SELECT %s FROM %s WHERE %s"%(fieldlist,tablelist,clauselist) 

Другими словами, рассмотрите использование прописных букв по ключевым словам SQL и повторите попытку.

+0

nopes, его еще не устраняем ошибку. Получите ту же ошибку. –

+0

Он показывает ту же ошибку? можете ли вы запустить код в редакторе? –

+0

'e.getmatchrows (далее ') OperationalError) в () e.getmatchrows (' в') C: \ Users \ синий \ Anaconda \ searchengine.pyc in getmatchrows (self, q) 134 tablenumber + = 1 135 fullquery = "SELECT% s FROM% s WHERE% s"% (список полей, таблица списка, клаузелист) 136 cur = self.con.execute (fullquery) 137 строк = [строка для строки в cur] 138 возвращаемая строка, слова OperationalError: рядом с «где»: ошибка синтаксиса ' –

Смежные вопросы