我一直在尝试使用 SQLAlchemy 将对象映射到数据库,但遇到了障碍。
Edit: Basically changed a whole bunch of stuff.
Run Code Online (Sandbox Code Playgroud)
版本信息(如果方便的话):[操作系统: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)
Run Code Online (Sandbox Code Playgroud)
背景:
现在,我有一个函数可以将必要的信息从文本数据库读入这些对象。该功能或多或少有效,我可以轻松地从对象中访问信息。
在 SQLAlchemy 代码运行之前,该函数将读取必要的信息并将其存储到类中。有一本名为的字典students,它这样存储:
students = {}
students[id] = Student(<all the info from the various "reader" functions>)
Run Code Online (Sandbox Code Playgroud)
之后,有一个“分配”算法将项目分配给学生。它做得足够好。就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)
Run Code Online (Sandbox Code Playgroud)
之后,我很好奇是否可以打印出学生词典中的所有学生。
for student in students.itervalues():
print student
Run Code Online (Sandbox Code Playgroud)
除了错误之外我还能得到什么。仅当在调用以下命令后尝试按照我的方式打印时,才会发生此错误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'
Run Code Online (Sandbox Code Playgroud)
如果这是一个问题,我不知道如何解决这个问题。如果需要更多信息,请询问,我会提供。
Questions:
Run Code Online (Sandbox Code Playgroud)
mapper改变了原始类/字典的任何内容? get字典的工作方式有什么特殊的吗?您在映射类之前创建Student实例,将类修改为 SQLAlchemy 需要的类。所以你的实例没有正确初始化。只需在调用后放置创建Student实例的行,一切就会按预期工作。mapper(Student, students_table)
| 归档时间: |
|
| 查看次数: |
8521 次 |
| 最近记录: |