首页 > 解决方案 > 如何解决在漂亮的 Tables Python 中重复显示数据的问题

问题描述

我在 python 控制台中使用 SQLite3 创建了数据库。在主菜单中,我有“显示所有数据”选项。我在 python 中使用了漂亮的表格。但问题是当我不退出程序并且我选择 3 次相同的选项“显示所有数据”时,每次选择此选项时它都会添加所有行。假设我在数据库中有 4 行,每次选择“显示所有数据”时,它都会显示/添加下 4 行到表中。下面的代码

import sqlite3 as sql
from prettytable import PrettyTable
  x = PrettyTable()

def display_all_data():
    conn = sql.connect("register.db")
    cur = conn.cursor()
    cur.execute("SELECT firstname,lastname,date_of_birth,id_number FROM datas ORDER BY lastname")
    rec = cur.fetchall()
    x.field_names = ["Firstname", "Lastname", "Date of Birth", "ID number"]
    for item in rec:
        print([x.add_row([rec[1],rec[2],rec[3],rec[4]]))

    #outside the for-loop

    print(x)
    conn.commit()
    conn.close()

每次我选择函数 display_all_datas 时,它都会添加相同的 4 行,但每次选择此选项时,我都想显示一次。

标签: pythonsqliteconsole

解决方案


改变:

for item in rec:
    print([x.add_row([rec[1],rec[2],rec[3],rec[4]])

至:

for item in rec:
    print([x.add_row(item)])

但是,如果您希望每次调用display_all_data只添加一行,那么您需要重新格式化一些代码。您需要conn在函数外部创建并执行查询,然后cur.fetchone()在函数中使用。

import sqlite3 as sql
from prettytable import PrettyTable
x = PrettyTable()
conn = sql.connect("register.db")
cur = conn.cursor()
cur.execute("SELECT firstname,lastname,date_of_birth,id_number FROM datas ORDER BY lastname")
x.field_names = ["Firstname", "Lastname", "Date of Birth", "ID number"]
    
def display_one_line_of_data():
    rec = cur.fetchone()
    print([x.add_row(rec))

    #outside the for-loop

    print(x)

推荐阅读