2013-02-26 3 views
1

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

Моя установка таблица

def user_table(): 
    data = lite.connect(database) 
    dat = data.cursor() 

    with data: 
     dat.executescript("""CREATE TABLE IF NOT EXISTS Users(Id INTEGER PRIMARY KEY AUTOINCREMENT, 
     'Username' UNIQUE, 
     'Password', 
     'Email', 
     'UserCharacters_Id' INTEGER 
     )"""); 

Теперь мой код, чтобы выбрать имя пользователя (имя пользователя, 123 существует и таблицы кажется правильным (проверено с SQLite студии)

database = 'test.db' 
data = lite.connect(database) 
dat = data.cursor() 
with data: 
    dat.execute("SELECT * FROM Users WHERE 'Username'='123'") 
    user = dat.fetchone() 
    print user 

Я пробовал много разных способов , но он продолжает возвращать None. Часть python, похоже, работает, только выбранная часть SQL идет не так (проверено с помощью отпечатков)

Пожалуйста, lp me out

ответ

2

В SQL для строк используются одиночные кавычки, а имена таблиц и столбцов указаны с двойными кавычками. (SQLite поддерживает одиночные кавычки для последней для совместимости с MySQL в некоторых местах.)

Ваш запрос сравнивает строку Username со строкой 123, и это сравнение не выполняется для каждой записи.

Используйте это:

dat.execute('SELECT * FROM Users WHERE "Username" = \'123\'') 

Но чтобы избежать проблем форматирования строки и атаки SQL-инъекции, следует использовать параметры:

username = "123" 
dat.execute('SELECT * FROM Users WHERE "Username" = ?', (username,)) 
+0

* луки * спасибо, (я делал последнюю часть в других частях, но для упрощения я проверил с 123). Это помогает мне много (работает сейчас). Спасибо :) –

+0

В таком случае, примите ответ :-) Нажмите символ ниже нижней стрелки. –

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