многомерный массив Python - PullRequest
0 голосов
/ 01 июня 2011

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

класс Spider (HTMLParser):

  def __init__(self, url):

        HTMLParser.__init__(self)
        req = urlopen(url)
        self.feed(req.read())


  def handle_starttag(self, tag, attrs):
        if tag == 'a' and attrs:
            print "Found link => %s" % attrs[0][1]
            cursor.execute("INSERT INTO queue VALUE((?), (?), (?))",(None,  attrs[0][0], attrs[0][1]))
            connection.commit()

if __name__ == '__main__':
    Spider(starturl)

Я думаю, что проблема в следующей строке.

cursor.execute("INSERT INTO queue VALUE((?), (?), (?))",(None,  attrs[0][0], attrs[0][1]))

Заранее спасибо!

1 Ответ

2 голосов
/ 01 июня 2011

Ключевое слово VALUES - множественное число, а не единственное число. Вам не нужно избавляться от лишних скобок вокруг вопросительных знаков, но они не нужны. Кроме того, вы можете явно указать SQL-серверу, что вы хотите вставить непосредственно в определенные столбцы, вместо того, чтобы передавать None для автоинкрементного первичного ключа.

cursor.execute("INSERT INTO queue (url, desc) VALUES (?, ?)", (attrs[0][0], attrs[0][1]))

При этом, возможно, вы захотите добавить дополнительный тест, чтобы убедиться, что attrs [0] [0] действительно href, потому что в противном случае вы будете сохранять любые другие классы, идентификаторы или события DOM, которые прикреплены к тегу в качестве атрибутов. Кроме того, поскольку формат коллекции attrs похож на [('href', 'http://example.com')], описание на самом деле не подходит, поэтому вы можете рассмотреть вопрос о переименовании столбцов базы данных.

...