Объект «NoneType» не имеет атрибута «get» с использованием SQLAlchemy

Я пытался сопоставить объект с базой данных с помощью SQLAlchemy, но столкнулся с проблемой.

Edit: Basically changed a whole bunch of stuff. 

Информация о версии, если она удобна: [ОС: Mac OSX 10.5.8 | Python: 2.6.4 | SQLAlchemy: 0.5.8]

Класс, который я собираюсь отобразить:

 class Student(object): def __init__(self, id, name): self.id = id self.name = name def __repr__(self): return str(self) def __str__(self): return "%s %s" %(self.id, self.name) 

Задний план:

Теперь у меня есть функция, которая считывает необходимую информацию из текстовой базы данных в эти объекты. Функция работает более или менее, и я могу легко получить доступ к информации из объектов.

Перед запуском кода SQLAlchemy функция будет считывать необходимую информацию и хранить ее в классе. Существует словарь, называемый students который хранит это как таковое:

 students = {} students[id] = Student(<all the info from the various "reader" functions>) 

Впоследствии существует алгоритм «выделения», который будет выделять проекты студенту. Он делает это достаточно хорошо. allocated_project остается None если студент не справляется с получением проекта.

SQLAlchemy бит:

Поэтому, после всего этого, я хотел бы сопоставить свой объект с таблицей базы данных.

 from sqlalchemy import * from sqlalchemy.orm import * engine = create_engine('sqlite:///:memory:', echo=False) metadata = MetaData() students_table = Table('studs', metadata, Column('id', Integer, primary_key=True), Column('name', String) ) metadata.create_all(engine) mapper(Student, students_table) 

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

 for student in students.itervalues(): print student 

Что я получу, кроме ошибки. Эта ошибка возникает только при попытке распечатать, как я, после вызова mapper :

 Traceback (most recent call last): File "~/FYP_Tests/FYP_Tests.py", line 140, in <module> print student File "~/FYP_Tests/Parties.py", line 30, in __str__ return "%s %s" %(self.id, self.name) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/SQLAlchemy-0.5.8-py2.6.egg/sqlalchemy/orm/attributes.py", line 158, in __get__ return self.impl.get(instance_state(instance), instance_dict(instance)) AttributeError: 'NoneType' object has no attribute 'get' 

Я не понимаю, как решить эту проблему, если это проблема. Если требуется дополнительная информация, пожалуйста, спросите, и я предоставлю ее.

 Questions: 
  1. Изменяет ли SQLAlchemy mapper что-либо об исходном классе / словаре?
  2. У этого есть что-то конкретное, чтобы get работу со словарями?

2 Solutions collect form web for “Объект «NoneType» не имеет атрибута «get» с использованием SQLAlchemy”

Вы создаете экземпляры Student перед отображением класса, который изменяет требования к классу SQLAlchemy. Таким образом, ваш экземпляр не был правильно инициализирован. Просто поместите строки, создающие экземпляры Student после вызова mapper(Student, students_table) и все будет работать так, как ожидалось.

Похоже, что у вас может возникнуть конфликт тени, где Column('id'...) скрывает Student.id. Изменение Student.__init__.id на Student._init__.sid было бы быстрым тестом для подтверждения или опровержения этой гипотезы.

Это упоминание упоминается в третьем блоке кода учебника SQLAlchemy о сопоставлениях .

Например, заменив ваш первый фрагмент кода на это смещение:

 class Student(object): def __init__(self, name, id): self.sid = id self.name = name # and so on 

Очевидно, что другие ссылки на Student.id также должны измениться.

  • Определение столбца перечисления SQLAlchemy с перечислением Python вызывает «ValueError: недействительное перечисление»
  • Связь SQLAlchemy «один-ко-многим» при наследовании одиночной таблицы - декларативная
  • Связать объекты в отношениях «многие-ко-многим» в SQLAlchemy
  • SQLAlchemy DELETE Ошибка, вызванная наличием как ленивой нагрузки, так и динамической версии того же отношения
  • Неверная транзакция, сохраняющаяся во всех запросах
  • SQLAlchemy по умолчанию DateTime
  • Диалог настройки SQLAlchemy Flask
  • Вставить dataframe в sqlalchemy postgresql с автоинкрементами idx
  •  
    Interesting Posts for Van-Lav

    CGI Python: как перенаправить на другую страницу после обработки данных POST

    Валидатор Deform / Colander, который имеет доступ ко всем узлам?

    Python – проверка того, является ли один список подмножеством другого

    У меня есть искривленный реактор, как я могу подключиться к нему?

    ipdb с модулем unittest python

    Установите только доступные пакеты с помощью «conda install –yes –file requirements.txt» без ошибок

    python: iif или (x? a: b)

    Как читать большой файл tif в python?

    лучший способ использовать индексный массив для получения элементов?

    Python Сортировка многомерного массива на основе 2-го элемента Subarray

    Определить переменные с теми же данными списка, но разными объектами, использующими python

    Разрешения Django-rest-framework для создания в viewet

    Django – выбор запроса фильтра по длине значения CharField

    Настройка доступа-Control-Allow-Origin (CORS) в облачных файлах Rackspace API Python

    Как использовать вложенные циклы в библиотеке joblib в python

    Python - лучший язык программирования в мире.