Объект «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 также должны измениться.

Interesting Posts

Webcraping в python: ошибка BS, селена и None

Как подать сигнал от запущенного QThread обратно в PyQt Gui, который его начал?

Получение ввода пароля командной строки в Python

Jupyter в Pycharm – dataframe не отображается, когда размер кадра данных слишком широк, не отображается опция горизонтальной прокрутки

Pandas: разделение кадра данных на несколько кадров данных по количеству строк

Как использовать источник JDBC для записи и чтения данных в (Py) Spark?

Почему мой соперник в Симпи не согласен с Rician in Scipy?

Обновления pyOpenSSL и pandas с использованием «pip» завершаются с «TypeError: resolve () получили неожиданный аргумент ключевого слова« replace_conflicting »»

Как заставить команду python3 запускать Python 3.6 вместо 3.5?

Опция отказоустойчивого окна в OLS от Pandas до Statsmodels

Анализатор метаданных документа на основе Python?

Как сделать функцию возвращать список индексов символов во второй строке, которая появляется в первой строке?

gevent / запросы зависают, делая много головных запросов

Полиномиальная функция не может быть решена с помощью Python sympy

Отправка сообщений с других языков на ядро ​​IPython

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