python数据库应用程序块
这是与postresql中的数据库交互的应用程序中的登录函数。我是python新手,目前正在执行except块中的两个print语句。 错误在于:cur.execute(mtype,(member_id,))任何关于为什么的想法都很受欢迎python数据库应用程序块,python,sql,postgresql,Python,Sql,Postgresql,这是与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.curs
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
我没有足够的理由发表评论。所以在这里发帖。仅仅说哪一行产生了错误并不能让我们深入了解问题所在。我的建议是要么打印出错误是什么,要么如果不知道怎么做,删除first try catch,看看产生了什么错误。如果您发布该消息,人们可以帮助您解决问题。您在初始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))
当然,代码中可能还有其他错误:不应该盲目捕捉异常,除非,您不在乎错误是什么。您正在捕获所有异常,并询问为什么会抛出异常而不向我们显示异常。不要捕获异常并发布它是什么。您想知道为什么首先会命中异常吗?或者您想知道为什么会命中异常?为什么会在第一次命中异常place@Eb1993你能发布错误消息吗?我们可以查看错误并进行调试。