这是与postresql中的数据库交互的应用程序中的登录功能。我是python的新手,目前正在执行except块中的两个print语句。 错误在于:cur.execute(mtype,(member_id,))任何关于为什么非常赞赏的想法。
def check_login(member_id, password):
conn = database_connect()
if(conn is None):
return None
cur = conn.cursor()
try:
mtype = """SELECT 'athlete' FROM athlete
WHERE member_id=%s
UNION
SELECT 'official' FROM official
WHERE member_id=%s
UNION
SELECT 'staff' FROM staff
WHERE member_id=%s"""
cur.execute(mtype, (member_id, ))
user_type = cur.fetchone()
except:
print("Error retrieving member type")
try:
sql = """SELECT member_id, title, given_names AS first_name, family_name, country_name, place_name AS residence
FROM public.country JOIN public.member USING (country_code) JOIN public.place ON (accommodation = place_id)
WHERE member_id=%s AND pass_word=%s"""
cur.execute(sql, (member_id, password))
user_data = cur.fetchone()
tuples = {
'member_id': user_data[0],
'title': user_data[1],
'first_name': user_data[2],
'family_name': user_data[3],
'country_name': user_data[4],
'residence': user_data[5],
'member_type': user_type[0]
}
cur.close()
conn.close()
return tuples
except:
print("Error Invalid Login")
cur.close()
conn.close()
return None
答案 0 :(得分:1)
你的初始mtype赋值中有多个%s
,但你的execute只提供一个参数的元组。这将失败。这可以通过在execute
:
mtype = """SELECT... member_id=%s UNION ... member_id=%s UNION ... member_id=%s"""
cur.execute(mtype, (member_id, member_id, member_id))
当然,代码中可能还有其他错误:一个人不应该盲目地捕获异常,除非你真的不关心错误是什么。
答案 1 :(得分:0)
我没有足够的积分发表评论。所以发帖在这里。只是说哪一行产生错误并没有给出很多关于问题的见解。我的建议是要么你打印出错误是什么,要么你不知道怎么做,删除第一次尝试捕获并看看产生的错误是什么。如果你发帖说人们可以帮你解决它。