有两个(三个,但我不算Elixir,因为它不是"官方")用SQLAlchemy定义持久化对象的方法:
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy.orm import mapper
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
class User(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return "<User('%s')>" % (self.name)
mapper(User, users_table) # <Mapper at 0x...; User>
Run Code Online (Sandbox Code Playgroud)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
def __init__(self, name):
self.name = name
def …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用 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 = …Run Code Online (Sandbox Code Playgroud)