2015-10-30 2 views
2

Я очень отчаянный, потому что я пробовал все, что мог, чтобы он работал, но не удался ... Я создал пул, который обрабатывает некоторые текстовые строки, а затем вставляет их в базу данных , Проблема в том, что он ничего не вставляет в таблицу.Не могу ВСТАВИТЬСЯ в базу данных Sqlite3

Я знаю, что, вероятно, это связано с тем, что несколько рабочих пытаются изменить базу данных, но я уже много чего пытался избежать.

Например этого (это метод для вставки URL в таблицу индекса):

def insert_into_index(self, url): 
    self.lock.acquire() 
    self.cur.execute('INSERT INTO index VALUES(?)', (url,)) 
    self.conn.commit() 
    self.lock.release() 

Или это (каждое новое применение метода имеет его собственный курсор):

def insert_into_index(self, url): 
    cur = self.conn.cursor() 
    cur.execute('INSERT INTO index VALUES(?)', (url,)) 
    self.conn.commit() 

фрагмент кода, где я создаю бассейн:

""" CREATE A POOL """ 

    pool = Pool(50) 
    for category in categories[1:2]: 
     task = pool.apply_async(index, args=(category.strip('\n'),)) 
     task.get() 

    pool.close() 
    pool.join() 

    """ POOL END """ 

Index() представляет собой метод, который создает экземпляр класса leaf(text), которые делают некоторые вещи с текстом, получают список strings и пытаются загрузить insert в базу данных.

class leaf(): 
    def __init__(self, url): 
     self.url = url 
     self.results = self.get_all_hrefs(url) 
     self.dbm = database_file.manager() 

     for res in self.results: 
       self.dbm.insert_into_index(res) 

Но у меня нет ничего в табличном указателе. Я пробовал все, что знал, без успеха. Не могли бы вы дать мне совет?

EDIT: Это ошибка, которая возникает, когда я добавляю task.get() в цикл.

line 86, in execute 
    task.get() 
    File "C:\Python27\lib\multiprocessing\pool.py", line 567, in get 
    raise self._value 
sqlite3.OperationalError: near "index": syntax error 

Но я вещь, что она не говорит ничего, потому что синтаксис совершенно такой же, как в другом методе, который называется последовательно и работает.

+0

'task = pool.apply_async (index, args = (category.strip ('\ n'),))' должно быть что-то после '', ''? – Busturdust

ответ

2

index является keyword. Вы должны указать его или использовать другое имя.

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