程式的輸出:
歡迎,請輸入您的用戶名和密碼 輸入用戶名:Manas 輸入密碼:123456 error2 Error3
以下是該程式的最小代碼:
import mysql.connector
import hashlib
import os
mycon=mysql.connector.connect(host="localhost",user="root",passwd="123456",database="library",use_unicode=True,charset="utf8")
cursor=mycon.cursor()
stmt = "SHOW TABLES LIKE 'users'"
cursor.execute(stmt)
result = cursor.fetchone()
if result:
pass
else:
cursor.execute("create table users(username varchar(20),key varbinary(100),salt varbinary(100));")
def users(username,password):
cursor.execute("select * from users where username='{}'".format(username))
data=cursor.fetchone()
if data=="(NULL)":
return False
elif data==True:
salt=data[2]
key=hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)
if data[1]==key:
return True
elif data[1]!=key:
return False
else:
print("error1")
else:
print("error2")
return False
#Main program
print("WELCOME, PLEASE ENTER YOUR USERNAME AND PASSWORD")
username=input("Enter username:")
password=input("Enter password:")
users(username,password)
if users==True:
print("user exists")
elif users==False:
print("user does not exist")
else:
print("Error3")
它被參考的表:
mysql> use library;
Database changed
mysql> select * from users;
---------- -------------------------------------------------------------------- --------------------------------------------------------------------
| username | key | salt |
---------- -------------------------------------------------------------------- --------------------------------------------------------------------
| Manas | 0xE42AB9B18A8F144EA7933FFA8E69E1FE28F20DA67B3E0FF3F1A0C2203D6148B2 | 0xF68894D924A69D035CC096C497F933B29A08E075F6DA2B19D955D08A33C0CAB4 |
---------- -------------------------------------------------------------------- --------------------------------------------------------------------
1 row in set (0.00 sec)
列印(資料):
WELCOME, PLEASE ENTER YOUR USERNAME AND PASSWORD
Enter username:Manas
Enter password:12345
('Manas', bytearray(b'\xe4*\xb9\xb1\x8a\x8f\x14N\xa7\x93?\xfa\x8ei\xe1\xfe(\xf2\r\xa6{>\x0f\xf3\xf1\xa0\xc2 =aH\xb2'), bytearray(b'\xf6\x88\x94\xd9$\xa6\x9d\x03\\\xc0\x96\xc4\x97\xf93\xb2\x9a\x08\xe0u\xf6\xda \x19\xd9U\xd0\x8a3\xc0\xca\xb4'))
error2
Error3
為什么會這樣?
uj5u.com熱心網友回復:
您還必須建立連接,以便它使用 utf8
假設你有 uft8mb4
mycon=mysql.connector.connect(host="localhost"
,user="root"
,passwd="123456"
,database="library"
,charset="utf8mb4")
字符集cpould也是utf8,thqat yoiu要檢查
并在處理引數時使用準備好的陳述句
cursor.execute("select * from users where username=%s",(username,))
更新
另外,您的表定義有問題鍵是 MySQL 中的保留字,因此可以將其封裝在反引號中,如下所示
cursor.execute("create table users(username varchar(20),`key` varbinary(100),salt varbinary(100));")
更新 2
在測驗您的代碼后,我發現其中有一些問題
您的函式會回傳一個您從未分配過的值
如果沒有用戶,則資料為空
import mysql.connector
import hashlib
import os
mycon=mysql.connector.connect(host="localhost",user="root",passwd="123456",database="library",use_unicode=True,charset="utf8mb4")
cursor=mycon.cursor()
stmt = "SHOW TABLES LIKE 'users'"
cursor.execute(stmt)
result = cursor.fetchone()
if result:
pass
else:
cursor.execute("create table users(username varchar(20),`key` varbinary(100),salt varbinary(100));")
def users(username,password):
cursor.execute("select * from users where username=%s",(username,))
data=cursor.fetchone()
if data is None :
return False
elif data is not None:
salt=data[2]
key=hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)
if data[1]==key:
return True
elif data[1]!=key:
return False
else:
print("error1")
else:
print("error2")
return False
#Main program
print("WELCOME, PLEASE ENTER YOUR USERNAME AND PASSWORD")
username=input("Enter username:")
password=input("Enter password:")
users = users(username,password)
if users==True:
print("user exists")
elif users==False:
print("user does not exist")
else:
print("Error3")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/438528.html
標籤:Python mysql python-3.x mysql-python mysql 连接器
上一篇:SQL多列相等
