Обновить определенную строку в таблице базы данныхPython

Программы на Python
Anonymous
Обновить определенную строку в таблице базы данных

Сообщение Anonymous »


Я создаю приложение с графическим интерфейсом для хранилища паролей, используя tkiner. Я пытаюсь добавить функцию, которая позволяет мне редактировать и обновлять любую конкретную строку в графическом интерфейсе. Я имею в виду, что это похоже на то, как функция remove_entry может удалить строку, в которой она находится. Я хочу, чтобы функция edit_password редактировала все, что она включена. Кроме того, я хочу, чтобы функция save_new_password обновляла таблицу хранилища в базе данных.

Вот функции, о которых я говорю:

def remove_entry(input): курсор.execute("УДАЛЕНИЕ ИЗ хранилища ГДЕ id =?", (ввод,)) БД.коммит() пароль_хранилище() def edit_password(): text1.config(state="нормальный") text2.config(state="нормальный") text3.config(state="нормальный") text4.config(state="нормальный") def save_new_password(): сайт = str(text1.get("1.0", "конец")) имя пользователя = str(text2.get("1.0", "конец")) пароль = str(text3.get("1.0", "конец")) день = str(text4.get("1.0", "конец")) Insert_fields = """ОБНОВИТЬ хранилище (сайт,имя пользователя,пароль,день) ЦЕННОСТИ(?, ?, ?, ?)""" курсор.execute(insert_fields, [веб-сайт, имя пользователя, пароль, день]) БД.коммит() text1.config(state="отключено") text2.config(state="отключено") text3.config(state="отключено") text4.config(state="отключено") пароль_хранилище() Вот мой код для справки:

импортировать sqlite3 импортировать хеш-библиотеку из импорта tkinter * импортировать tkinter как tk из functools импорт частичного из tkinter импортировать простой диалог с sqlite3.connect("password_vault.db") в качестве базы данных: курсор = db.cursor() курсор.execute(""" СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ master( идентификатор ЦЕЛОГО ПЕРВИЧНОГО КЛЮЧА, пароль ТЕКСТ НЕ NULL); """) курсор.execute(""" СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ хранилище( идентификатор ЦЕЛОГО ПЕРВИЧНОГО КЛЮЧА, сайт ТЕКСТ НЕ NULL, имя пользователя ТЕКСТ НЕ NULL, пароль ТЕКСТ НЕ NULL, день ТЕКСТ НЕ НУЛЬ); """) всплывающее окно защиты (текст): ответ = simpledialog.askstring("входная строка", текст) обратный ответ окно = Тк() window.title("Менеджер паролей") Защиту hashed_master_password (вход): хэш = hashlib.sha512(input).hexdigest() вернуть хеш настройка защиты(): окно.геометрия("400x400") setup_password = tk.Label(window, text="Создать мастер-пароль") setup_password.config(anchor="e") setup_password.pack() create_password = tk.Entry(окно, ширина = 20) create_password.focus() create_password.pack() setup_label = tk.Label(window, text="Повторно введите пароль") setup_label.pack() submit_password = tk.Entry(окно, ширина=20) подтверждение_пароля.пакет() fail_to_match = tk.Label(окно) fail_to_match.pack() защита save_password(): если create_password.get() == submit_password.get(): hashed_password = hashed_master_password(create_password.get().encode("UTF-8")) Insert_password = """ВСТАВИТЬ В мастер(пароль) ЗНАЧЕНИЯ(?)""" курсор.execute(insert_password, [хэш_пароль]) БД.коммит() пароль_хранилище() еще: fail_to_match.config(text="Пароли не совпадают") setup_button = tk.Button(window, text="установить пароль", команда=save_password) setup_button.pack() защита login_screen(): окно.геометрия("500x500") master_password = tk.Label(window, text="Введите мастер-пароль") master_password.config(anchor="e") мастер_пароль.пакет() enter_password = tk.Entry(window, width=20, show="*") enter_password.focus() enter_password.pack() error_label = tk.Label(окно) неудачный_метка.пакет() защита get_master_password(): check_hash_password = hashed_master_password(enter_password.get().encode("UTF-8")) курсор.execute("SELECT * FROM master WHERE id=1 AND пароль =?", [check_hash_password]) вернуть курсор.fetchall() защита check_password(): совпадение = get_master_password() если совпадение: пароль_хранилище() еще: enter_password.delete(0, «конец») fail_label.config(text="Неверный пароль") pass_check_button = tk.Button(window, text="Отправить", Pady=5, команда=проверочный_пароль) pass_check_button.pack() защита пароля_хранилища(): для виджета в window.winfo_children(): виджет.уничтожить() защита add_entry(): веб-сайт1 = "веб-сайт" username1 = "имя пользователя" пароль1 = "пароль" days1 = "пароль на несколько дней подходит" веб-сайт = всплывающее окно (сайт1) имя пользователя = всплывающее окно (имя пользователя1) пароль = всплывающее окно (пароль1) день = всплывающее окно (дни1) Insert_fields = """ВСТАВИТЬ В хранилище(сайт,имя пользователя,пароль,день) ЦЕННОСТИ(?, ?, ?, ?)""" курсор.execute(insert_fields, (веб-сайт, имя пользователя, пароль, день)) БД.коммит() пароль_хранилище() защита Remove_entry (вход): курсор.execute("УДАЛЕНИЕ ИЗ хранилища ГДЕ id =?", (ввод,)) БД.коммит() пароль_хранилище() window.geometry("1550x700") main_frame = Рамка (окно) main_frame.grid(sticky="новости") my_canvas = Canvas(main_frame, высота=700, ширина=1525) my_canvas.grid(row=0, columns=9, Sticky='news') my_canvas.grid_rowconfigure(0, вес = 10) my_frame = Frame(my_canvas, bd=1, рельеф="твердый") my_canvas.create_window(0, 0, окно=my_frame, якорь="nw") полоса прокрутки = полоса прокрутки (main_frame, команда = my_canvas.yview) Scrollbar.grid(строка=0, столбец=10, липкий="ns") my_canvas.configure(yscrollcommand=scrollbar.set) my_frame.bind('', лямбда e: my_canvas.configure(scrollregion=my_canvas.bbox("все"))) защита edit_password(): text1.config(state="нормальный") text2.config(state="нормальный") text3.config(state="нормальный") text4.config(state="нормальный") vault_label = tk.Label(my_frame, text="Добро пожаловать в хранилище паролей", font=("Time New Roman", 20)) vault_label.grid(столбец=1, строка=0) add_button = tk.Button(my_frame, text="Добавить новую информацию", команда=add_entry) add_button.grid(столбец=0, Padx=8) веб-сайт_label = tk.Label(my_frame, text="Веб-сайт") веб-сайт_label.grid (строка = 2, столбец = 0, Padx = 80) username_label = tk.Label(my_frame, text="Имя пользователя") username_label.grid(строка=2, столбец=1, Padx=80, Pady=8) пароль_метка = tk.Label(my_frame, text="Пароль") пароль_label.grid(строка=2, столбец=2, Padx=80) days_password_is_good_for = tk.Label(my_frame, text="Пароль Days подходит для") days_password_is_good_for.grid(строка=2, столбец=3, Padx=80) курсор.execute("ВЫБРАТЬ * ИЗ хранилища") если курсор.fetchall() не равен None: я = 0 пока правда: курсор.execute("ВЫБРАТЬ * ИЗ хранилища") массив = курсор.fetchall() text1 = tk.Text(my_frame) text1.insert("1.0", массив[1]) text1.config(высота=1, ширина=20, состояние="отключено") text1.grid(столбец=0, строка=i+4) text2 = tk.Text(my_frame) text2.insert("1.0", массив[2]) text2.config(высота=1, ширина=20, состояние="отключено") text2.grid(столбец=1, строка=i+4) text3 = tk.Text(my_frame) text3.insert("1.0", массив[3]) text3.config(высота=1, ширина=20, состояние="отключено") text3.grid(столбец=2, строка=i+4) text4 = tk.Text(my_frame) text4.insert("1.0", массив[4]) text4.config(высота=1, ширина=20, состояние="отключено") text4.grid(столбец=3, строка=i+4) delete_button = tk.Button(my_frame, text="Delete", команда=partial(remove_entry, array[0])) delete_button.grid(столбец=4, строка=i+4, Pady=8, Padx=10) edit_button = tk.Button(my_frame, text="Обновить информацию", команда=edit_password) edit_button.grid(столбец=5, строка=i+4, Pady=8, Padx=10) защита save_new_password(): сайт = str(text1.get("1.0", "конец")) имя пользователя = str(text2.get("1.0", "конец")) пароль = str(text3.get("1.0", "конец")) день = str(text4.get("1.0", "конец")) Insert_fields = """ОБНОВИТЬ хранилище (сайт,имя пользователя,пароль,день) ЦЕННОСТИ(?, ?, ?, ?)""" курсор.execute(insert_fields, [веб-сайт, имя пользователя, пароль, день]) БД.коммит() text1.config(state="отключено") text2.config(state="отключено") text3.config(state="отключено") text4.config(state="отключено") пароль_хранилище() пароль_save_button = tk.Button(my_frame, text="Сохраните обновленную информацию", команда = save_new_password) пароль_save_button.grid(столбец=6, строка=i+4, Pady=8, Padx=10) я = я+1 курсор.execute("ВЫБРАТЬ * ИЗ ХРАНИЛИЩА") if (len(cursor.fetchall())

Вернуться в «Python»