sqlite3 view () печатает с пустым списком? - PullRequest
2 голосов
/ 23 апреля 2020

У меня есть функция 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)

1 Ответ

1 голос
/ 23 апреля 2020

Вы излишне вызываете cur.fetchall(), не сохраняя возвращаемое значение в переменной, и курсор уже достиг конца строк, возвращенных этим вызовом, поэтому при втором вызове cur.fetchall() он больше не имеет больше строк на возврат.

Это можно исправить, просто удалив избыточный вызов.

Измените:

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

на:

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