Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2020 11:38:30

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

Мой скрипт принимает значения имени и пароля от пользователя и нужно их сравнивать со значениями в БД.

 #!/usr/bin/python
import MySQLdb
import getpass
print("-------------------------")
print("<<<<<<<<<Welcome>>>>>>>>>")
print("-------------------------")
username = input("Username:")
if username == "username" :
    password = getpass.getpass(prompt="Enter secret password:")
else :
    print ("please try another user name. This user name is incorrect")
print password
# Open database connection
db = MySQLdb.connect("hostname","user,"pass","db" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# execute SQL query using execute() method.
cursor.execute("SELECT userID, password from db")
# Fetch a single row using fetchone() method.
data = cursor.fetchone()
 
# disconnect from server
db.close()

Мне нужно сравнить введенные значения username и password со значениями userID и password из БД.

Структура таблицы permissions:
 id  int(11) Автоматическое приращение
userID  bigint(12) unsigned
password  varchar(32)
PointsQuota tinyint(3) 
Period  tinyint(2) 
deviceID  char(17) 
user_phone  bigint(20) 
email varchar(128) 
enable  tinyint(2) 
ssh_port  int(5)

ОС Ubuntu 20.04, Python 3.8.

Офлайн

#2 Окт. 23, 2020 13:00:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 7953
Репутация: +  727  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

Выполни

  
cursor.execute("SELECT userID, password from db")
data = cursor.fetchone()
print(data)
Если там кортеж, то сделаешь вот так
  
cursor.execute("SELECT userID, password from db")
data = cursor.fetchone()
dbuser, dbpass = data
if username == dbuser and password == dbpass:
    print('Ok')
else:
    print('Fail')



Офлайн

#3 Окт. 23, 2020 13:23:48

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

спасибо, но модуль mysqldb не найден и почему-то не устанавливается:

 # ./auth.py 
Traceback (most recent call last):
  File "./auth.py", line 5, in <module>
    import MySQLdb
ImportError: No module named MySQLdb
и
 # pip3 install MySQLdb
ERROR: Could not find a version that satisfies the requirement MySQLdb (from versions: none)
ERROR: No matching distribution found for MySQLdb
и
 # pip3 install mysqldb
ERROR: Could not find a version that satisfies the requirement mysqldb (from versions: none)
ERROR: No matching distribution found for mysqldb

Офлайн

#4 Окт. 23, 2020 14:04:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7901
Репутация: +  552  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

Офлайн

#5 Окт. 23, 2020 14:27:46

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

спасибо, изменил таким образом:

 #!/usr/bin/python
import getpass
import pymysql
print("-------------------------")
print("<<<<<<<<<Welcome>>>>>>>>>")
print("-------------------------")
username = input("Username:")
if username == "username" :
        password = getpass.getpass(prompt="Enter secret password:")
else :
    print ("please try another user name. This user name is incorrect")
print password
db = pymysql.connect("hostname","user,"pass","db")
# prepare a cursor object using cursor() method
cursor = db.cursor()
cursor.execute("SELECT userID, password from permissions")
data = cursor.fetchone()
print(data)

при построчном выполнении:
 >>> cursor.execute("SELECT userID, password from permissions")
1
>>> print(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'data' is not defined

Офлайн

#6 Окт. 23, 2020 14:44:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7901
Репутация: +  552  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

ffrr
А зачем ты к посту код прилепил, если по факту выполняешь не его?

У тебя к коде

 cursor.execute("SELECT userID, password from permissions")
data = cursor.fetchone()
print(data)

но ты выполнил программу построчно через консоль питона

  >>> cursor.execute("SELECT userID, password from permissions")
1
>>> print(data)

то есть строку
 data = cursor.fetchone()

ты решил не выполнять, а теперь ВНЕЗАПНО “name ‘data’ is not defined”. Как так получилось, вот ведь загадка!



Офлайн

#7 Окт. 23, 2020 14:52:09

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

да, спасибо за уточнение, моя ошибка.

Офлайн

#8 Окт. 23, 2020 15:05:29

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

теперь почему-то не срабатывает блок с запросом ввода пароля, хотя ввожу username такой же как userID в БД:

 # ./auth.py
-------------------------
<<<<<<<<<Welcome>>>>>>>>>
-------------------------
Username:659605758501
(659605758501, '202cb962ac59075b964b07152d234b70')
659605758501
659605758501
please try another user name. This user name is incorrect
Fail


 #!/usr/bin/env python3.8
              
import getpass
import pymysql
                                  
print("-------------------------")
print("<<<<<<<<<Welcome>>>>>>>>>")
print("-------------------------")
username = input("Username:")
                                                                      
 db = pymysql.connect("hostname","user,"pass","db")
# prepare a cursor object using cursor() method
cursor = db.cursor()
                                                          
cursor.execute("SELECT userID, password from permissions")
data = cursor.fetchone()
                     
dbuser, dbpass = data
           
print(data)
print(dbuser)
print(username)
                         
if username == "dbuser" :
         password = getpass.getpass(prompt="Enter secret password:")
    
else :                                                                 
    print ("please try another user name. This user name is incorrect")
                                             
if username == dbuser and password == dbpass:
    print('Ok')
else:            
    print('Fail')

Офлайн

#9 Окт. 23, 2020 15:23:52

ffrr
Зарегистрирован: 2020-10-22
Сообщения: 61
Репутация: +  0  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

т.е. почему-то не срабатывает условие:

 if username == dbuser :
        password = getpass.getpass(prompt="Enter secret password:")
хотя я предварительно ввел равное значение для username, такое же как dbuser

Офлайн

#10 Окт. 23, 2020 15:51:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 7901
Репутация: +  552  -
Профиль   Отправить e-mail  

Сравнение введенного имени юзера и пароля со значениями в MariaDB

ffrr
Ты пишешь программу, очевидно, что она не заработает с первого раза как ожидается. Ни у кого в мире не получается программировать чисто, писать код без ошибок и глупостей с первого раза. Никогда. Просесс отладки программы всегда занимает времени больше, чем собственно написание кода. Надо учиться отлаживать. Хотя бы самым примитивным способом. Вот что мешает взять, и перед строкой if username == dbuser вывести переменные на экран? Ну тупо чтобы убедиться, что они и правда равны, а это не ты забыл капс лок выключить. Это же элементарные, прям стартовые вещи.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version