【发布时间】:2020-09-30 22:36:09
【问题描述】:
为什么调用 onLogin() 时 fetchone() 返回 None ,即使数据库有一行有值? 当我在 sql 数据库中使用相同的查询时,它返回正确的值。 使用 fetchall() 并使用 for 循环在终端上不会返回任何内容。
import mysql.connector
#SQL CONNECTION
db = mysql.connector.connect(
host="localhost",
user="root",
password="",
database="python"
)
cursor = db.cursor(buffered=True)
#main
def onStart():
global username
print("Enter a username to continue")
username = input()
#Checking the database for the username
query = "SELECT username FROM userdata"
cursor.execute(query)
result = cursor.fetchall()
for x in result:
if x == (username,):
onLogin()
else:
print("Error Occurred!")
def onLogin():
print("Enter a password")
password = input()
#comparing pwds
query = "SELECT password FROM userdata WHERE username = '%s'"
cursor.execute(query, username)
result = cursor.fetchone()
print(result)
onStart()
【问题讨论】:
-
你不能引用占位符(
%s,而不是'%s')。您必须将值的元组传递给execute,而不是单个值。 -
@deceze
username在这里是全局变量,所以它可以工作,通过在onLogin中使用print(username)进行检查,使用%s而不是'%s'给出语法错误。你能举例说明如何正确地将用户名作为元组传递吗?