sqlite& python - 只拉取第一个结果

时间:2010-03-31 22:13:35

标签: python sqlite

这很奇怪(不过,这是我第一次尝试使用python / sqlite),但是如果我执行 fetchAll(),我似乎可以获得所有行,但除此之外 - 无论我尝试什么,总是在db中只返回第一行 - 第二次迭代因为返回null而停止。想知道我是如何在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 个答案:

答案 0 :(得分:6)

您正在重复使用相同的光标来执行两个不同的查询。尝试使用两个不同的游标,看看是否能解决您的问题。

答案 1 :(得分:3)

如果我没弄错,第二次在Cursor上调用execute时,前一次调用的结果将被丢弃。

这就是为什么你可以使用fetchall,因为它会在你再次调用execute之前返回所有结果。

对于更新,请使用第二个Cursor,以避免第一个结果无效。

答案 2 :(得分:0)

每次获取数据之前,必须执行命令/ SQL查询。 fetchall()fetchone()等。仅抓取已经执行的内容;因此,当您执行一次时,除非已经执行过一次查询,否则无法获取多次。