sqlite与python - 只提取第一个结果

5 投票
3 回答
1801 浏览
提问于 2025-04-15 21:06

这件事挺奇怪的(老实说,这是我第一次尝试用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 个回答

1

在每次获取数据之前,你需要先执行一个命令或者SQL查询。像 fetchall()fetchone() 这些方法,只能获取已经执行过的结果;所以如果你只执行了一次查询,就不能再获取多次,除非你重新执行查询。

3

如果我没记错的话,当你第二次在一个Cursor上调用execute时,第一次调用的结果会被丢掉。

所以你可以使用fetchall,因为它会在你再次调用execute之前,把所有的结果都返回给你。

如果要更新数据,建议使用第二个Cursor,这样可以避免把第一个Cursor的结果弄没。

10

你在用同一个光标执行两个不同的查询。试试用两个不同的光标,看看这样能不能解决你的问题。

撰写回答