Запрос наличия записи с использованием заполнителей в предложении WHERE - PullRequest
0 голосов
/ 12 октября 2019

Я пишу скрипт Python для входа в систему, который проверяет, присутствует ли учетная запись пользователя в базе данных SQLite. Как вставить заполнители в мой оператор sql для проверки ввода пользователя по записям в таблице базы данных? или какую другую альтернативу я могу применить, не используя цикл for, который может быть медленным, если база данных огромна?

Используя python3 в качестве базового кода и интегрируя Sqlite для базы данных, я попытался использовать предложение EXISTS послепользовательский ввод путем включения заполнителей для значений, которые представляют пользовательский ввод. Предложение Exists обычно возвращает 1 (True) или 0 (False), которые я присвоил переменной, чтобы при проверке на «IF selector» проверять, существует ли запись учетной записи в таблице «Log» или нет.

            print('Logging into an existing account...')
            try:
                self.user = input('Enter user name: ')
                self.pas = input('Enter password: ')
                self.log = (self.user,self.pas)
                self.sql = '''SELECT EXISTS (SELECT 1 FROM Log WHERE 
                Name=? AND Password=?);'''
                self.cur.execute('SELECT * FROM Log;')             
                self.val = self.cur.execute(self.sql,self.log)
                if self.val == 1:
                    print(f'\nLogged in as {self.user}')
                    time.sleep(2)
                else:
                    print('\nAccount is non-existent!')
                    time.sleep(2)

Ожидаемый результат: При наличии записи пользователя в соответствии с предложением EXISTS всегда должно возвращаться значение 1, которое в случае проверки с помощью селектора IF должно иметь значение «True», что приводит к выводу «Logged as (user)».

Фактический результат: вывод «Учетная запись не существует», несмотря на наличие записи пользователя в таблице базы данных без ошибок.

1 Ответ

0 голосов
/ 19 октября 2019

execute () анализирует операторы SQL и кортеж. В моем случае кортеж содержал мои переменные. Поэтому мне просто нужно было получить значение, возвращаемое функцией execute (), используя fetchone (). Предполагая, что возвращаемое значение должно быть строкой, содержащей целое число по логическому выводу, я присвоил его переменной и применил индексирование для определения фактического значения. При тестировании с использованием IF получен ожидаемый результат!

                self.sql = '''SELECT EXISTS (SELECT 1 FROM Log WHERE Name=? AND 
                Password=?);'''
                self.cur.execute(self.sql,self.log)
                self.val = self.cur.fetchone()
                if self.val[0]==1:
                    time.sleep(1)
                    print(f'\nLogged in as {self.user}\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...