TypeError: Argument vom Typ „NoneType“ kann beim Abrufen aus der Datenbank nicht iteriert werdenPython

Python-Programme
Guest
 TypeError: Argument vom Typ „NoneType“ kann beim Abrufen aus der Datenbank nicht iteriert werden

Post by Guest »

Ich erstelle eine App mit einer Flask-basierten API und einer PostgreSQL-Datenbank. Ein großer Teil des Projekts ist ein Empfehlungsalgorithmus, der Daten dynamisch aus der Datenbank abruft und in Pandas DataFrames verarbeitet. Wenn ich versuche, auf http://127.0.0.1:5000/recomender/1 zuzugreifen, um Empfehlungen für den Benutzer mit student_id = 1 zu erhalten, erhalte ich die Fehlermeldung:

Code: Select all

TypeError: argument of type 'NoneType' is not iterable
[/b]
Dieser Fehler ist unerwartet, da die Datenbank gültige Daten für student_id = 1 enthält. Hier ist ein Ausdruck der abgerufenen Daten (mit psycopg2 und RealDictRow):

Code: Select all

RealDictRow([('name', 'Jane Doe'), ('student_id', 1), ('email', 'jane.doe@example.com'), ('phone', '123-456-7890'), ('grade', 'junior'), ('race', 'hispanic'), ('birthday', datetime.date(2006, 5, 15)), ('gender', 'female'), ('income', 'middle'), ('creeated_at', datetime.datetime(2024, 6, 27, 1, 25, 15, 235039)), ('intended_major', 'COMPUTER SCIENCE'), ('interest', ['Science', 'technology']), ('gpa', None), ('hashed_password', None), ('username', None)])
[/b] Während einige Felder mit „Keine“ gefüllt sind, sollten sie sich überhaupt nicht auf das Erhalten einer Empfehlung auswirken, der Code zum Erhalten von Empfehlungen benötigt sie jedoch nicht:

Code: Select all

def calculate_matching(student_interest, student_grade, student_intended_major, opprtunity_tags):
score = 0

for tag in opprtunity_tags:
if tag in student_interest:
score += 2
if tag in student_grade:
score += 1
if tag in student_intended_major:
score += 3

return score
und

Code: Select all

@app.route('/recomender/')
def createRecomendations(student_id):
# Dynamically fetch the latest student data from the database
students_df = get_students_df()
opportunities_df = get_opportunities_df()

# Ensure the student exists in the dataframe
if student_id not in students_df.index:
return {'error': 'Student not found'}, 404

# Get the student's information
recstudent = students_df.loc[students_df.index == student_id].iloc[0]

student_interest = recstudent['interest']
student_grade = recstudent['grade']
student_intended_major = recstudent['intended_major']

match_scores = []
for ind, row in opportunities_df.iterrows():
opportunity_tags = row['tags']
match_score = calculate_matching(student_interest, student_grade, student_intended_major, opportunity_tags)

# Update the DataFrame with the match score
opportunities_df.at[ind, 'match_score'] = match_score

match_scores.append({'opportunity': row['title'], 'match_score': match_score})

print(student_interest)
print(match_scores)
return {'recommendations': match_scores}
und ich rufe Schüler- und Aktivitätsdaten dynamisch ab

Code: Select all

def get_students_df():
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM students')
students = cursor.fetchall()
cursor.close()
conn.close()
print(students)
return pd.DataFrame(students)

def get_opportunities_df():
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM oppertunities')
opportunites = cursor.fetchall()
cursor.close()
conn.close()
return pd.DataFrame(opportunites)
Ich füge die Informationen übrigens in einen Pandas-Datenrahmen ein.
Ich hatte den gleichen Fehler http://127.0.0.1:5000/ recomender/7 (Empfehlungen für den Benutzer mit dem Studentenausweis 7 erhalten) und ich habe das Problem behoben, indem ich das Interesse geändert habe, das zunächst das Lesen von Daten hatte

Code: Select all

RealDictRow([('name', 'algo rithim'), ('student_id', 7), ('email', 'algo@rithim.com'), ('phone', '123-456-9901'), ('grade', 'junior'), ('race', 'black'), ('birthday', datetime.date(2005, 6, 15)), ('gender', 'male'), ('income', 'middle'), ('creeated_at', datetime.datetime(2024, 6, 27, 11, 41, 1, 27045)), ('intended_major', 'BIOLOGY'), ('interest', ['science', 'research']), ('gpa', 3), ('hashed_password', None), ('username', None)])
[/b] und ich haben das Interesse in der Datenbank auf Wissenschaft und Technologie geändert. Ich habe die gleiche Änderung mit student_id:1 vorgenommen und es hat immer noch nicht funktioniert. Ich habe verschiedene Änderungen an den Interessen versucht, die mit den Interessen einiger anderer Daten übereinstimmen, und habe trotzdem den Fehler erhalten. Zu den weiteren Entitäten, die funktioniert haben, gehören:

Code: Select all

[RealDictRow([('name', 'Johnny Doe'), ('student_id', 5), ('email', 'john.do2@example.com'), ('phone', '123-456-7840'), ('grade', 'junior'), ('race', 'white'), ('birthday', datetime.date(2005, 6, 15)), ('gender', 'male'), ('income', 'middle'), ('creeated_at', datetime.datetime(2024, 6, 27, 4, 59, 29, 242410)), ('intended_major', 'MASS MEDIA'), ('interest', None), ('gpa', None), ('hashed_password', None), ('username', None)])
[/b] und  

Code: Select all

RealDictRow([('name', 'Testuser'), ('student_id', 21), ('email', 'Testuser@testmail.com'), ('phone', '(912) 134-3553'), ('grade', 'junior'), ('race', 'black'), ('birthday', datetime.date(2006, 1, 14)), ('gender', 'male'), ('income', None), ('creeated_at', datetime.datetime(2024, 12, 4, 13, 46, 23, 364021)), ('intended_major', 'VISUAL AND PERFORMING ARTS'), ('interest', ['Science', 'Computers', 'Technology', 'Male Identifying', 'College Prep', 'Business', 'Chemistry', 'Space Exploration', 'Social Justice', 'Psychology', 'U.S. History', 'World History']), ('gpa', None), ('hashed_password', '$2b$12$cz5M9yuK.9ILN431TPQ51ul46a3sCDCOCLxZXX6TF8P4yV5S.7dZy'), ('username', None)]),
[/b]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post