Arhn - архитектура программирования

KeyError при запросе базы данных sql alchemy

Итак, у меня есть словарь уровней образования:

education_levels = {
"Less than high school": 0,
"High school diploma or equivalent": 1,
"Postsecondary non-degree award": 2,
"Some college, no degree": 3,
"Associate's degree": 4,
"Bachelor's degree": 5,
"Master's degree": 6,
"Doctoral or professional degree": 7,
"#N/A": 100
}

Я хочу запросить свою базу данных, чтобы она показывала только те уровни образования, которые равны или ниже введенного уровня образования.

jobs = Occupation.query.filter(Occupation.area_name == area).filter(
    education_levels[Occupation.typical_entry_level_education] <= education_levels[education])

Однако это дает мне ключевую ошибку. Я понимаю, что ключевая ошибка - это когда вы ищете что-то, что не является ключом. Я на 100% уверен, что перебрал все возможные ключи из базы данных. Я даже пытался найти что-то, чего нет в наборе ключей, используя это:

def test():
jobs = Occupation.query.all()
job_list = []
for job in jobs:
    if not(job.typical_entry_level_education in education_levels.keys()):
        d = {
            'ed': job.typical_entry_level_education
        }
        job_list.append(d)
return job_list

Вывод, который я получаю с помощью моей функции test(), таков:

{
  "jobs": []
}

Я не могу понять, как я получаю ошибку ключа, когда все находится в наборе ключей. Я даже пробовал логические проверки в своем запросе, и он все равно выдает мне ошибки

вот ошибка, которую я получаю (я уверен, что это от Occupation.typer_entry_level_education, потому что я удалил последний, и он все еще дает мне ошибку)

education_levels[Occupation.typical_entry_level_education] <= education_levels[education])
KeyError: <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x3161e30>


Ответы:


1

Проблема в том, что вы используете столбец SQLAlchemy как ключ, а не его значение. К сожалению, вы не можете выполнить этот запрос так, как пытаетесь. Вы можете сначала получить допустимые значения, прежде чем делать запрос.

valid_levels = [k for k, v in education_levels.items() if v <= education_levels[education]]
jobs = Occupation.query.filter(Occupation.area_name == area).filter(Occupation.typical_entry_level_education.in_(valid_levels))
25.06.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..