首页 > 解决方案 > sqlite3 view() 打印空列表?

问题描述

我有 testtable() 函数,可以在必要时创建表并在一列中列出所有 PDF 文件名。但是,当我执行 view() 函数时,它会打印一个空列表。我是否遗漏了什么或只是以错误的方式解决这个问题?

import os, sys
import sqlite3
import csv

testdb = 'pdftestdir.db'

def testtable():
    conn = sqlite3.connect(testdb)
    cur = conn.cursor()
    cur.execute('CREATE TABLE IF NOT EXISTS test (name TEXT)')
    path = os.listdir('/root/Desktop/PDF')
    conn = sqlite3.connect(testdb)
    cur = conn.cursor()
    cur.execute('SELECT * FROM test')
    exists = cur.fetchall()
    for name in path:
        if name.endswith('.pdf'):
            if not exists:
                cur.execute('INSERT INTO test VALUES (?)', (name,))
            else:
                pass
    conn.commit()
    conn.close()

def view():
    conn = sqlite3.connect(testdb)
    cur = conn.cursor()
    cur.execute('SELECT * FROM test')
    cur.fetchall()
    rows = cur.fetchall()
    conn.close()
    print(rows)

标签: pythonpython-3.xdatabasefunctionsqlite

解决方案


您在没有将返回值存储到变量的情况下进行了不必要的调用cur.fetchall(),并且游标已经到达了该调用返回的行的末尾,因此第二次调用cur.fetchall()它时不再有要返回的行。

您可以通过简单地删除冗余调用来解决此问题。

改变:

cur.fetchall()
rows = cur.fetchall()

至:

rows = cur.fetchall()

推荐阅读