как сделать одноразовую проверку нажатой клавиши?

Мне нужно чтобы при запуске программы я нажал на любую клавишу, эта клавиша сохранилась в переменную в питоне и в базе данных, а затем программа остановилась.

import sqlite3
import keyboard

a = ''

def print_pressed_keys(e):
    global a
    a = e.name
    with sqlite3.connect('database.db') as db:
        cursor = db.cursor()
        cursor.execute('''CREATE TABLE IF NOT EXISTS hotkey (key1 TEXT)''')
        query = f""" UPDATE hotkey SET key1 = '{a}' """
        cursor.execute(query)
        db.commit()

keyboard.hook(print_pressed_keys)
keyboard.wait(a)
print(a)

В базе данных клавиша сохраняется, но с переменной в питоне проблема. И программа не останавливается после одного нажатия. (мне не нужно ставить остановку программы на определенную клавишу)


Ответы (2 шт):

Автор решения: gil9red

Неправильно вы с SQL работаете

Не:

query = f""" UPDATE hotkey SET key1 = '{a}' """
cursor.execute(query)

А:

query = "UPDATE hotkey SET key1 = ?"
cursor.execute(query, (a,))

Разница в том, что используется биндинг-параметров и драйвер базы может подготовить запрос, сделав нужное экранирование или трансформацию данных (например, объект даты-время превратить в строку/число, что понимает база данных)

А для остановки приложения можно использовать sys.exit

→ Ссылка
Автор решения: MIkhail

как я уже выяснил, функция read_key в данном случае будет подходить

import keyboard
print(keyboard.read_key())
→ Ссылка