как выполнить поиск в базе данных SQLite3 с использованием переменной в Python

#python #python-3.x #sqlite

#python #python-3.x #sqlite

Вопрос:

В настоящее время я пишу программу на Python, в которой мне нужно выполнить поиск в базе данных SQLite3, я хочу иметь возможность выполнять поиск в базе данных с использованием переменной, данные для которой я получу из выпадающего списка Tkinter (графический интерфейс)

Ниже приведен мой табличный код…

 db = sqlite3.connect('db.sqlite3')
cursor = db.cursor()
cursor.execute('''
            CREATE TABLE IF NOT EXISTS depot_racks(
                id INTEGER PRIMARY KEY,
                rack TEXT,
                rackloc TEXT,
                floorzone TEXT,
                product TEXT,
                serial TEXT,
                status TEXT,
                entdate TEXT,
                servdate TEXT,
                parts TEXT,
                pat TEXT)''')
  

Ниже приведен мой код для попытки поиска в базе данных с использованием переменной, которая получает выбор пользователя…

 def search_all_racks():
    selection = rackTextBox.get()
    cursor.execute("SELECT * FROM depot_racks WHERE product LIKE '%selection%'")
    for row in cursor.fetchall():
        dataArea.insert('end', row)
  

Это ничего не возвращает, есть ли способ использовать selection переменную внутри запроса SQLite?

Заранее спасибо

Ответ №1:

Вы используете строковый литерал 'selection' , а не значение переменной selection .
Это правильный способ сделать это:

 cursor.execute("SELECT * FROM depot_racks WHERE product LIKE '%' || ? || '%'", (selection,))
  

Таким образом, подстановочные % знаки будут объединены со значением строки selection .

Комментарии:

1. Ммммм, это проблема с подсветкой синтаксиса stackoverflow? Конечные скобки, похоже, тоже являются частью строки.

2. @CoolCloud да, я тоже это вижу.