Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PostgreSQL Python внос данных

Мурат Шакуров Ученик (197), открыт 2 дня назад
подключил базу данных все работает только когда хочу записать переменную выдает ошибку
КОД:
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()

код не чистил
1 ответ
Анонимус Мудрец (16042) 2 дня назад
Ошибка в вашем коде кроется в уязвимости к 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 дня назад
все равно выдает
Мурат ШакуровУченик (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
Анонимус Мудрец (16042) Мурат Шакуров, Возможные причины:
  • Неправильные учетные данные: Неправильный host, user, password, или db_name.
  • Брандмауэр или другие сетевые ограничения: Брандмауэр или другие настройки сети могут блокировать соединение с базой данных.
  • База данных не запущена: Убедитесь, что PostgreSQL-сервер запущен на вашем компьютере.
  • Неправильный порт: Если база данных находится на нестандартном порту, это нужно указать в строке подключения.
  • Проблема с правами доступа: Убедитесь, что пользователь, указанный в Config.py, имеет права на подключение к базе данных.
Похожие вопросы