【发布时间】:2010-04-09 05:14:07
【问题描述】:
我一直在尝试使用 SQLAlchemy 将对象映射到数据库,但遇到了障碍。
Edit: Basically changed a whole bunch of stuff.
版本信息(如果方便):[操作系统:Mac OSX 10.5.8 |蟒蛇: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:
- SQLAlchemy
mapper是否改变了原始类/字典的任何内容? - 这对
get使用字典的方式有什么特定的吗?
【问题讨论】:
标签: python sqlalchemy