sqlite & python - тянет только первый результат - PullRequest
4 голосов
/ 01 апреля 2010

Это довольно странно (к счастью, это моя первая попытка с python / sqlite), но я могу получить все строки, если я сделаю fetchAll () , но кроме этого -независимо от того, что я пытаюсь, всегда заканчивается в БД, возвращая только первую строку - вторая итерация останавливается, потому что возвращается ноль.Хотите знать, если что-то не так с тем, как я пишу это в Python?БД, кажется, в порядке ..

con = sqlite3.connect('backup.db')
con.row_factory = sqlite3.Row
cur = con.cursor()
cur.execute('select * from tb1;')

for row in cur:
    try:
#       row = dataCur.fetchone()
        #if row == None: break
        print type(row)

        print ' Starting on: %i' % row[0]

        cleaner = Cleaner(scripts=True, remove_tags=['img'], embedded=True)
        try:
            cleaned = cleaner.clean_html(row[2]) #data stored in second col
            cur.execute('update tb1 set data = ? where id = ?;', (cleaned, row[0]))
        except AttributeError:
            print 'Attribute error'

        print ' Ended on: %i' % row[0]

    except IOError:
        print 'IOexception'

Ответы [ 3 ]

6 голосов
/ 01 апреля 2010

Вы повторно используете один и тот же курсор для выполнения двух разных запросов. Попробуйте использовать два разных курсора и посмотрите, решит ли это вашу проблему.

3 голосов
/ 01 апреля 2010

Если я не ошибаюсь, при втором вызове execute для курсора, результат предыдущего вызова сбрасывается.

Именно поэтому вы можете использовать fetchall, потому что он возвращает все результаты, прежде чем вы снова вызовете execute.

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

0 голосов
/ 22 декабря 2018

Вы должны выполнять команду / SQL-запрос перед каждым получением данных. fetchall(), fetchone() и т. Д. Только захватывать то, что уже выполнено; поэтому, когда вы выполняете один раз, вы не можете получить более одного раза, если вы уже не выполнили запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...