Отобразить базу данных в окне tkinter
Мне необходимо отобразить мою базу данных в окне tkinter
попробовала с помощью следующего кода
import sqlite3
import pymysql.cursors
import tkinter as tk
from tkinter import *
my_conn = pymysql.connect(host='localhost',
user='root',
password='almaopt',
db='sklad',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
###### end of connection ####
##### tkinter window ######
my_w = tk.Tk()
my_w.geometry("400x250")
with my_conn.cursor() as cursor:
sql = ('''SELECT * from mom LIMIT 0,10''')
cursor.execute(sql)
i = 0 # row value inside the loop
for mom in cursor:
for j in range(len(mom)):
e = Entry(my_w, width=10, fg='blue')
e.grid(row=i, column=j)
e.insert(END, mom[j])
i = i + 1
cursor.close()
my_w.mainloop()
но выдает ошибку Traceback (most recent call last): File "dp.py", line 26, in e.insert(END, mom[j]) KeyError: 0
Пробовала еще вот таким способом
from tkinter import *
from tkinter import ttk
import tkinter as tk
import tkinter.ttk as ttk
import pymysql.cursors
import sqlite3
#connection database 'sklad'
connection = pymysql.connect(host='localhost',
user='root',
password='almaopt',
db='sklad',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
#function for button
def click_button():
with connection.cursor() as cursor:
# SQL
sql = "SELECT ID, Nomination, Boarcode, Quantity, Price FROM mom "
# Выполнить команду запроса (Execute Query).
cursor.execute(sql)
print("cursor.description: ", cursor.description)
print()
for row in cursor:
print(row)
cursor.close ()
#decription desktop window
window = Tk()
window.title("Склад Альма Опт")
window.geometry ('2000x1000')
#declaring tabs
#active tab1
#add and describe table on tab1
#describe button on tab1
btn = Button(window, text="Загрузить базу данных", command=click_button)
btn.place(x=10, y=50)
btn.pack()
#grafics window output
window.mainloop()
Здесь осуществляется полноценный вывод базы данных, но я не понимаю как его перенести в графическое окно
Ответы (1 шт):
Судя по ошибке, mom - это словарь (KeyError происходит при попытке получении значения по несуществующему ключу из словаря), а код у вас как для получения значений из списка.
Чтобы выводило значения из словаря, нужно перебирать ключи из mom (насколько я понимаю, каждый ключ - это имя колонки результата запроса), по каждому ключу выводить значение в текстовое поле:
i = 0 # row value inside the loop
for mom in cursor:
j = 0
for key in mom:
e = Entry(my_w, width=10, fg='blue')
e.grid(row=i, column=j)
e.insert(END, mom[key])
j = j + 1
i = i + 1
Можно упростить код с помощью enumerate:
for i, mom in enumerate(cursor):
for j, key in enumerate(mom):
e = Entry(my_w, width=10, fg='blue')
e.grid(row=i, column=j)
e.insert(END, mom[key])
Также теоретически в словарях ключи могут приходить в разном порядке, поэтому желательно их либо сортировать (for j, key in enumerate(sorted(mom)): ...), либо завести список с нужными ключами (именами колонок), и по ним получать данные, примерно так:
columns = ['ID', 'Nomination', ...] # имена колонок заменить на нужные
for i, mom in enumerate(cursor):
for j, key in enumerate(columns):
e = Entry(my_w, width=10, fg='blue')
e.grid(row=i, column=j)
e.insert(END, mom[key])