【问题标题】:sqlite3 view() prints with empty list?sqlite3 view() 打印空列表?
【发布时间】:2020-08-07 04:24:47
【问题描述】:

我有 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)

【问题讨论】:

    标签: python python-3.x database function sqlite


    【解决方案1】:

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

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

    变化:

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

    到:

    rows = cur.fetchall()
    

    【讨论】:

    • 我不知道我在查看它时是如何错过的。谢谢。这很容易解决它。
    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多