TypeError: аргумент типа «NoneType» не повторяется при извлечении из базы данных.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 TypeError: аргумент типа «NoneType» не повторяется при извлечении из базы данных.

Сообщение Anonymous »

Я создаю приложение с API на основе Flask и базой данных PostgreSQL. Большая часть проекта — это рекомендательный алгоритм, который динамически извлекает данные из базы данных и обрабатывает их в DataFrames pandas. Когда я пытаюсь получить доступ к http://127.0.0.1:5000/recomender/1, чтобы получить рекомендации для пользователя с Student_id = 1, я получаю сообщение об ошибке:

Код: Выделить всё

TypeError: argument of type 'NoneType' is not iterable
Эта ошибка является непредвиденной, поскольку база данных содержит действительные данные для Student_id = 1. Вот распечатка полученных данных (с использованием psycopg2 и RealDictRow):

Код: Выделить всё

RealDictRow([('name', 'Jane Doe'), ('student_id', 1), ('email', '[email protected]'), ('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] хотя некоторые поля не заполнены, они вообще не должны влиять на получение рекомендации, коду для получения рекомендаций они не нужны:

Код: Выделить всё

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
и

Код: Выделить всё

@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}
и я динамически получаю данные об учащихся и активности

Код: Выделить всё

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)
Кстати, я помещаю информацию в фрейм данных pandas.
У меня была та же ошибка http://127.0.0.1:5000/ recomender/7 (получение рекомендаций для пользователя с идентификатором студента 7), и я исправил это, изменив процент, который сначала имел чтение данных

Код: Выделить всё

RealDictRow([('name', 'algo rithim'), ('student_id', 7), ('email', '[email protected]'), ('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] и я изменил интерес на «Наука и технология» в БД. Я сделал то же самое изменение с Student_id:1, и это все равно не сработало, и попробовал различные изменения в процентах, соответствующих интересам некоторых других данных, и все равно получил ошибку. Для контекста, другие объекты, которые работали, включают:

Код: Выделить всё

[RealDictRow([('name', 'Johnny Doe'), ('student_id', 5), ('email', '[email protected]'), ('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] и  

Код: Выделить всё

RealDictRow([('name', 'Testuser'), ('student_id', 21), ('email', '[email protected]'), ('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]

Подробнее здесь: https://stackoverflow.com/questions/793 ... om-databas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»