gpt4 book ai didi

python - 'NoneType' 对象没有属性 'get' 使用 SQLAlchemy 错误

转载 作者:行者123 更新时间:2023-11-28 18:55:41 25 4
gpt4 key购买 nike

我一直在尝试使用 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 与字典的工作方式有关?

最佳答案

您在映射类之前创建了 Student 实例,这会根据 SQLAlchemy 的需要修改类。所以你的实例没有正确初始化。只需在调用 mapper(Student, students_table) 之后放置创建 Student 实例的行,一切都会按预期工作。

关于python - 'NoneType' 对象没有属性 'get' 使用 SQLAlchemy 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2605205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com