Почему возникает проблема с выдачей данных из MySQL?
from flask import Flask
import pymysql
import pymysql.cursors
import config
import tkinter as tk
from config import host,user,password, db_name
#импорт файла для базы данных
#подключение к базе данных
try:
connection_to_data_base = pymysql.connect(
host = host,
port = 3306,
user = user,
password = password,
database= db_name,
cursorclass= pymysql.cursors.DictCursor
)
except Exception as ex:
print('Went wrong')
print(ex)
#sql_запросы
query_for_russian_art = """
SELECT DISTINCT rus.title, rus.description, rus.author
FROM russian rus
INNER JOIN artistic art ON rus.title = art.title;
"""
query_for_foreign_art = """
SELECT DISTINCT fr.title, fr.description, fr.author
FROM foreig fr
INNER JOIN artistic art ON fr.title = art.title;
"""
query_for_russian_scient = """
SELECT DISTINCT rus.title, rus.description, rus.author
FROM russian rus
INNER JOIN scientific sci ON rus.title = sci.title;
"""
query_for_foreign_scient = """
SELECT DISTINCT fr.title, fr.description, fr.author
FROM foreig fr
INNER JOIN scientific sci ON fr.title = sci.title;
"""
window = tk.Tk() #создание окна и названия
window.title('Папирус')
window.geometry("700x800")
final_pool = []
text_widget = tk.Text(window, height=10, width=70)
text_widget.pack(pady=20)
#функция для обновления экрана и перехода на следующий этап выбора
def refresh_screen():
for elements in window.winfo_children():
elements.destroy()
create_widgets()
#создание ранее удаленного текстового виджета
def create_widgets():
global text_widget
text_widget = tk.Text(window, height=10, width=70)
text_widget.pack(pady=20)
#функция для отображения результатов
def show_results():
queries = {
'Отечественная': [query_for_russian_art, query_for_russian_scient],
'Зарубежная': [query_for_foreign_art, query_for_foreign_scient],
'Художественная':[query_for_russian_art],
'Научная':[query_for_foreign_scient]
}
selected_categories = [cat for cat in final_pool if cat in queries]
print("Текущий финальный пул:", final_pool)
print("Выбранные категории для отображения:", selected_categories)
for category in selected_categories:
for query in queries[category]:
execute_query_and_show_result(query)
#функция вызова запроса из mySQL
def execute_query_and_show_result(query):
print("Выполняемый запрос:", query)
with connection_to_data_base.cursor() as cursor:
try:
cursor.execute(query)
result = cursor.fetchall()
final_show = [[str(value) for key, value in row.items() if key != 'id'] for row in result]
text_widget.delete(1.0, tk.END)
if not final_show:
text_widget.insert(tk.END, "Нет данных для отображения.\n")
else:
for row in final_show:
text_widget.insert(tk.END, ', '.join(row) + '\n')
except Exception as e:
print(f"Ошибка при выполнении запроса: {e}")
def first_button_for_first_user_choise():
final_pool.append('Отечественная')
print(final_pool)
refresh_screen()
second_pool()
def second_button_for_first_user_choise():
final_pool.append('Зарубежная')
print(final_pool)
refresh_screen()
second_pool()
def first_button_for_second_user_choise():
final_pool.append('Художественная')
print(final_pool)
refresh_screen()
show_results()
def second_button_for_second_user_choise():
final_pool.append('Научная')
print(final_pool)
refresh_screen()
show_results()
#сбор информации от пользователя через кнопки
def first_pool():
first_pool_button_1 = tk.Button(window, text="Отечественная", command = first_button_for_first_user_choise)
first_pool_button_2 = tk.Button(window, text="Зарубежная", command = second_button_for_first_user_choise)
first_pool_button_1.pack(pady=120)
first_pool_button_2.pack(pady=20)
def second_pool():
second_pool_button_1 = tk.Button(window, text="Художественная", command = first_button_for_second_user_choise)
second_pool_button_2 = tk.Button(window, text="Научная", command = second_button_for_second_user_choise)
second_pool_button_1.pack(pady=120)
second_pool_button_2.pack(pady=20)
first_pool()
window.mainloop()
Это мой код на Python.
Суть проста — нажал на кнопку, получил данные из БД. Но выдача происходит некорректно. Не могу понять почему.
В самом MySQL ответы отличные, значит, по логике, проблема в самом коде.
Но вот где именно?
Большое спасибо за ответ, если что-то нужно добавить - добавлю.
P.S. Первый в жизни проект на Python, не обессудьте.
Вот пример вывода. Подтягивает не ту книгу. Должен выдавать Палеонтологию Антрополога, но выдаёт ту, которая вообще не подходит под заданные категории.
Ниже прилагаю структуру таблиц из mySQL, которые используются для выбранных категорий. Если нужно что-то ещё - пишите, всё добавлю, заранее спасибо