Найти - Пользователи
Полная версия: Сравнение введенного имени юзера и пароля со значениями в MariaDB
Начало » Базы данных » Сравнение введенного имени юзера и пароля со значениями в MariaDB
1 2 3
ffrr
Мой скрипт принимает значения имени и пароля от пользователя и нужно их сравнивать со значениями в БД.
 #!/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.
py.user.next
Выполни
  
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')
ffrr
спасибо, но модуль 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
ffrr
спасибо, изменил таким образом:
 #!/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
FishHook
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”. Как так получилось, вот ведь загадка!
ffrr
да, спасибо за уточнение, моя ошибка.
ffrr
теперь почему-то не срабатывает блок с запросом ввода пароля, хотя ввожу 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')
ffrr
т.е. почему-то не срабатывает условие:
 if username == dbuser :
        password = getpass.getpass(prompt="Enter secret password:")
хотя я предварительно ввел равное значение для username, такое же как dbuser
FishHook
ffrr
Ты пишешь программу, очевидно, что она не заработает с первого раза как ожидается. Ни у кого в мире не получается программировать чисто, писать код без ошибок и глупостей с первого раза. Никогда. Просесс отладки программы всегда занимает времени больше, чем собственно написание кода. Надо учиться отлаживать. Хотя бы самым примитивным способом. Вот что мешает взять, и перед строкой if username == dbuser вывести переменные на экран? Ну тупо чтобы убедиться, что они и правда равны, а это не ты забыл капс лок выключить. Это же элементарные, прям стартовые вещи.
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