Найти - Пользователи
Полная версия: Авторизация python+ cx_oracle
Начало » Базы данных » Авторизация python+ cx_oracle
1
brutalsuperman
Запускаю програму, перехожу в форму авторизации нажимаю кнопку логин(после ввода данных) програма виснет. Как мне считать данные о пользователях?



con = cx_Oracle.connect('test/root@localhost')
cursor = con.cursor()
cursor.execute(“select user_name,user_password from users”)
counter = cursor.execute(“SELECT COUNT(*) FROM users”)
for i,n in cursor.fetchall():

if username == i:
if password == n:
QtGui.QMessageBox.information(self, ‘BOOYA!’, ‘Success!!’)
self.close()
self.mainw = Main()
self.mainw.show()

else:
QtGui.QMessageBox.warning(self, ‘Dang it!’, ‘Password incorrect…’)
return
JOHN_16
Во первых, код надо постить на форумах в тегах code, иначе отступы пропадают и ваш код можно и не понять.
Во вторых, у вас ошибка - вы делаете два запроса одним и тем же курсором и после этого пытаетесь получить результат первого запроса,в то время как в курсоре лежит результат последнего запроса.
В третьих, вы в целом не правильно решаете задачу - зачем опрашивать ВСЕ записи о пользователях и паролях, что бы потом в цикле перебирать? Вам нужно сделать запрос в котором вы уже выберите пользователя, и потом проверять сходство пароля.
В четверых, держать пароли в базе в открытом виде это не безопасно, может это ваш домашний проект и это не столь играет роли, но на будущее помните. что современный стандарт это держать в базе “подсоленую” хэш сумму пароля
brutalsuperman
JOHN_16
Во первых, код надо постить на форумах в тегах code, иначе отступы пропадают и ваш код можно и не понять.Во вторых, у вас ошибка - вы делаете два запроса одним и тем же курсором и после этого пытаетесь получить результат первого запроса,в то время как в курсоре лежит результат последнего запроса.В третьих, вы в целом не правильно решаете задачу - зачем опрашивать ВСЕ записи о пользователях и паролях, что бы потом в цикле перебирать? Вам нужно сделать запрос в котором вы уже выберите пользователя, и потом проверять сходство пароля.В четверых, держать пароли в базе в открытом виде это не безопасно, может это ваш домашний проект и это не столь играет роли, но на будущее помните. что современный стандарт это держать в базе “подсоленую” хэш сумму пароля

 con = cx_Oracle.connect('test/root@localhost')
cursor = con.cursor()
cursor.execute("select user_name,user_password from users")

for i,n in cursor.fetchall():

if username == i:
if password == n:
QtGui.QMessageBox.information(self, 'BOOYA!', 'Success!!')
self.close()
self.mainw = Main()
self.mainw.show()

else:
QtGui.QMessageBox.warning(self, 'Dang it!', 'Password incorrect...')
return

Два запроса я не делаю, просто изначально не мог понять как работает и пытался прикрутить каунтер. По поводу как хранятся пароли, сильно не переживайте, приложение не выйдет в свет, но за совет спасибо.
Вам нужно сделать запрос в котором вы уже выберите пользователя, и потом проверять сходство пароля
А вот здесь можно поподробней, я не понял как выбирать.
JOHN_16
примерно так:
cursor.execute(select user_password from users WHERE user_name=?”, (username,) )
pw = cursor.fetchone()
if pw and pw == n:
    ...
brutalsuperman
Спасибо. Может посоветуете что-то почитать? Желательно с примерами
JOHN_16
brutalsuperman
По теме БД? В моем блоге найдите запись про Sqlite3, вам будет полезна. В остальном не подскажу ибо не осведомлен.
brutalsuperman
JOHN_16
cursor.execute(“select user_password from users WHERE user_name=?”, (username,) )
pw = cursor.fetchone()
if pw and pw == n:
...

А что за переменная n? И как я понял второй pw - пароль?
JOHN_16
По теме БД? В моем блоге найдите запись про Sqlite3, вам будет полезна. В остальном не подскажу ибо не осведомлен.

JOHN_16
По теме БД? В моем блоге найдите запись про Sqlite3, вам будет полезна. В остальном не подскажу ибо не осведомлен.

Меня больше интересует cx_oracle, так как работаю с Oracle, а mysql под запретом)
JOHN_16
brutalsuperman
А что за переменная n? И как я понял второй pw - пароль?
n из вашего примера, pw пароль из БД
brutalsuperman
Меня больше интересует cx_oracle, так как работаю с Oracle, а mysql под запретом)
Интернет в помощь - офиц.документация и гугл. И да там на английском скорее всего все.

А то что в письме написали - метод подстановки другой в cx_oracle:
cx_Oracle.paramstyle

String constant stating the type of parameter marker formatting expected by the interface. Currently ‘named’ as in ‘where name = :name’.
Часть II. Запросы с параметрами.
——————————–

Согласно спецификации Python Database API 2.0, для выполнения запросов
с параметрами каждый модуль должен реализовывать переменную
paramstyle, которая определяет каким образом будут передаваться
параметры запросов. Текущая версия cx_Oracle(3.0) поддерживает режим
‘named’, то есть в модуле установлена переменная
cx_Oracle.paramstyle='named' и можно создавать конструкции в запросах
в виде:

select * from all_users where USERNAME LIKE :S

При этом связывание параметров запроса со значениями можно можно
выполнить двумя способами:
* Именованный параметeр метода execute:

cursor2.execute(“select * from all_users where USERNAME LIKE :S ”,S='S%')
* Словарь {':переменная':значение,…}

cursor2.execute(“select * from all_users where USERNAME LIKE :S ”,{':S':'S%'})
brutalsuperman
JOHN_16
Спасибо, уже разобрался. Проблема была в том что считывало в поле ввода user11 а для сравнения с базы брало user11____ Подчеркивание ето пробелы.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB