sqlite与python - 只提取第一个结果
这件事挺奇怪的(老实说,这是我第一次尝试用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
你在用同一个光标执行两个不同的查询。试试用两个不同的光标,看看这样能不能解决你的问题。