I've a problem in this SELECT:
前提:
我编写了一个脚本,创建了一个数据库,其中的“Key”是密码加密的->;encrypt代码:
import base64
import os
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
password_provided = "password" # input
password = password_provided.encode() # Convert in type byte
salt = b'\xaes\xff\x80\xe2| (\xfcG\xbdk\xedxb9\x15n7'
kdf = PBKDF2HMAC(
algorithm=hashes.SHA256(),
length=32,
salt=salt,
iterations=100000,
backend=default_backend()
)
key = base64.urlsafe_b64encode(kdf.derive(password)) #can only use kdf once
print(key)
现在我正在尝试使用方法POST进行身份验证,我开始尝试使用一些SELECT for‘search’日志的密码,并找到一个方法来比较未加密的字符串和登录时尝试的加密字符串:
mycursor = mydb.cursor()
sql = "SELECT password FROM users WHERE password = %s", (key) #Problem!
mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:
print(x)
我的输出是:
** File "login.py", line 12, in <module>
mycursor.execute(sql)
File "/Users/jhon/prova/lib/python3.7/site-packages/mysql/connector/cursor.py", line 536, in execute
stmt = operation.encode(self._connection.python_charset)
AttributeError: 'tuple' object has no attribute 'encode'
**
我试着做“key1=键。编码()“,但这是错误的。。。 谢谢大家。你知道吗
此行创建一个字符串和一个int的二元组,并将其赋给变量“sql”:
“(key)”不生成1元组;要这样做,请使用“(key,)”。看起来您想创建一个字符串的2元组,后跟一个1元组。你知道吗
然后此行将作为单个参数创建的2元组发送到被调用的方法:
如果这是您正在使用的库,那么函数定义的docstring将在这里执行(参见第183行)…:https://github.com/mysql/mysql-connector-python/blob/master/lib/mysql/connector/cursor.py
。。。显示要使用n元组作为.execute(…)的第二个函数参数来指定查询模式填充值。你可以用可变参数操作符,也可以是序列解包操作符(在https://medium.com/understand-the-python/understanding-the-asterisk-of-python-8b9daaa4a558中提到),或者你可以把它们分开。所以您可能需要这样的代码:
或者
相关问题 更多 >
编程相关推荐