Печать записи из базы данных

#python #python-3.x #sqlite

#python #python-3.x #sqlite

Вопрос:

Я хочу распечатать запись из базы данных. Сначала пользователь вводит значение в поле ввода, затем, если оно соответствует значениям базы данных, затем распечатывает его (например, пользователь вводит 2914, а 2914 находится в базе данных, а затем распечатывает его), печатаются значения всех столбцов моей базы данных (означает, что соединение в порядке), но операция поиска не работает

 tf = StringVar()

def getvalue():
    n=tf.get()
    connection = sqlite3.connect("database.sqlite3")
    cursor = connection.cursor()
    cursor.execute("SELECT table.col1 FROM table ;")
    results = cursor.fetchall()
    cursor.close()
    print(results)
    if n==results:
        print (results)
    else:
        print("not there")
            
#*************************************
Label(root, text="'Enter Network ASN'").grid(row = 3, column = 6, sticky = W, pady = 14) 
Entry(root, textvariable = tf).grid(row=3, column=8, sticky = E, pady = 14) #entry textbox

WSignUp = Button(root, text="Search", command=getvalue).grid(row=5, column=7, sticky=W, pady = 14) #button

root.mainloop()
  

Мои значения базы данных похожи [(‘2914’,), (‘13830’,), (‘13768’,), (‘33597’,), (‘21219’,), (‘21949’,), (‘209’,), (‘701’,), (‘1239’,), (‘1273’,), (‘1759’,), (‘2828’,)]

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

1. Вы выполняли какую-либо отладку? Я бы рекомендовал прочитать ericlippert.com/2014/03/05/how-to-debug-small-programs .

Ответ №1:

Вам нужно изменить свой SQL-запрос, правильный SQL-запрос будет выглядеть следующим образом

SELECT table.col1 FROM table WHERE table.col1 = user_entered_value;

Этот запрос вернет все значения в таблице, где столбец соответствует значению в WHERE предложении. Если вы проверяете несколько значений, используйте

SELECT table.col1 FROM table WHERE table.col1 IN list_of_values;

Эти запросы не будут защищены от SQL-инъекций, поэтому вам нужно будет изучить использование подготовленных операторов с библиотекой SQLite, поскольку я с ней не знаком. Затем вы можете просмотреть возвращенные результаты запроса и соответствующим образом сгенерировать графический интерфейс.

Проблема с запросом, который вы использовали, заключалась в том, что он просто получал все значения, которые были в таблице, без сравнения с данными, введенными вашим пользователем.

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

1. ВЫБЕРИТЕ table.col1 ИЗ таблицы, ГДЕ table.col1 = n; но он рассматривает n как столбец, выдающий ошибку, такого столбца нет

2. Вам нужно добавить свою схему таблиц к вашему вопросу, поскольку я не знаю, как создается ваша таблица.

3. ВЫБЕРИТЕ table.col1 ИЗ таблицы, ГДЕ table.col1 =?», (n,) В любом случае, я решил этот путь, спасибо, что обратили внимание на то, что мы можем передавать переменную с помощью запросов SQLite.