2015-02-20 4 views
0

Я пытаюсь создать часы в системе, которые пользователь вводит ключ, и сравнивает его с базой данных sqlite.Сравнение кортежей с ints

Проблема, с которой я столкнулся, заключается в сравнении ключа, введенного с тем, который был введен в базу данных. Я предполагаю, что это потому, что sqlite-запрос возвращает кортеж. Я подумал, что положить его в цикл for разобрал бы. Хотя они совпадают, они возвращаются как ложные.

import sqlite3 as lite 

conn = lite.connect('attendance.db') 
c = conn.cursor() 

r = raw_input('Awaiting Key: ') 
keyCode = str(int(r)) 

q = c.execute("SELECT key FROM employees WHERE key = '%s'") % keyCode 

for i in q: 
    if i == r: 
     print 'open' 
    else: 
     print 'closed' 
+0

Этот код не имеет смысла, вы пытаетесь '' 'форматировать * значение, возвращаемое *' c.execute', а не его аргумент. Кроме того, вы не должны создавать SQL-запросы с помощью интерполяции строк. – jonrsharpe

ответ

0

Не вставляйте данные в запрос с использованием строковой интерполяции. Параметры запроса намного эффективнее и не уязвимы для инъекционных атак.

0
q = c.execute("SELECT key FROM employees WHERE key = '%s'") % keyCode 

Если я правильно, это неправильно. Вам нужно сделать:

c.execute("SELECT key FROM employees WHERE key =?", (keyCode,)) 
c.fetchone() 

вернуть значение, которое нужно.

+2

Процент оператора по-прежнему находится на неправильной стороне круглых скобок, если он пытается отформатировать строку. – Kevin

+0

отредактировано, должно быть правильно (я думаю?) – Hawk

Смежные вопросы