#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.