Ошибка в вашем коде кроется в уязвимости к SQL-инъекциям и неправильном использовании cursor.fetchone(). fetchone() возвращает следующую строку из результата запроса, а ваш запрос INSERT не возвращает строк.
import time
import tkinter as tk
from tkinter import messagebox
import psycopg2
from Config import host, user, password, db_name
def Share():
name = EnterText.get()
password = EnterText1.get()
contact = EnterText2.get()
CodeWriter = Code.get() # Эта переменная не используется, удаляем
try:
connection = psycopg2.connect(
host=host,
user=user,
password=password,
database=db_name
)
cursor = connection.cursor()
# Параметризованный запрос — защита от SQL-инъекций!
SQLTABLE = "INSERT INTO users (name, password, contact) VALUES (%s, %s, %s)"
cursor.execute(SQLTABLE, (name, password, contact)) # Переменные передаются как параметры
connection.commit() # Важно! Сохраняем изменения в базе данных
messagebox.showinfo("Успешно!", "Данные успешно добавлены!") # Уведомление пользователя
except Exception as ex:
messagebox.showerror("Ошибка!", f"Ошибка при работе с PostgreSQL: {ex}") # Сообщение об ошибке
finally:
if connection:
cursor.close()
connection.close()
print("[INFO] PostgreSQL connection closed")
# ... (остальной код tkinter остается без изменений) ...
Мурат ШакуровУченик (197)
2 дня назад
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Admin\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "D:\Users\Admin\Desktop\registration\main.py", line 11, in Share
coun = psycopg2.connect(
^^^^^^^^^^^^^^^^^
File "C:\Users\Admin\AppData\Local\Programs\Python\Python311\Lib\site-packages\psycopg2\__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.OperationalError
Process finished with exit code 0
КОД:
import time
import tkinter as tk
from tkinter import messagebox
import psycopg2
from Config import host, user, password, db_name
def Share():
name = EnterText.get()
password = EnterText1.get()
contact = EnterText2.get()
CodeWriter = Code.get()
try:
connection = psycopg2.connect(
host = host,
user = user,
password = password,
database = db_name
)
cursor = connection.cursor()
SQLTABLE = f"INSERT INTO users(name, password, contact) VALUES('{name}', '{password}', '{contact}')"
cursor.execute(SQLTABLE)
print(f"Server version: {cursor.fetchone()}")
except Exception as ex:
print("[INFO] Error while working with PostgreSQL", ex)
finally:
if connection:
cursor.close()
connection.close()
print("[INFO] PostgreSQL connection closed")
root = tk.Tk ()
root.resizable(width= False, height= False)
root.title("registration")
root.geometry('700x400')
root['bg'] = "white"
text = tk.Label(root, text = "Name", font=('Arial Bold', 20), fg = "black",bg = "white")
text.place(x = 295, y = 25)
EnterText = tk.Entry(fg="black", width = 47)
EnterText.place(x = 195, y = 75)
text1 = tk.Label(root, text = "Password", font=('Arial Bold', 20), fg = "black",bg = "white")
text1.place(x = 275, y = 125)
EnterText1 = tk.Entry(fg="black", width=47)
EnterText1.place(x = 195, y = 175)
text2 = tk.Label(root, text = "Contact", font=('Arial Bold', 20), fg = "black",bg = "white")
text2.place(x = 285, y = 225)
EnterText2 = tk.Entry(fg="black", width=47)
EnterText2.place(x = 195, y = 275)
Share = tk.Button(width = 27, text = "send a request", fg = "white", bg = "black", command = Share)
Share.place(x = 240, y = 335)
text2 = tk.Label(root, text = "Code", font=('Arial Bold', 20), fg = "black",bg = "white")
text2.place(x = 525, y = 300)
Code = tk.Entry(fg="black", width=20) #CMLJG837DOMJKL
Code.place(x = 500, y = 340)
root.mainloop()
код не чистил