以下是否可以创建用于会话的视图类?
v = Table('viewname', metadata, autoload=True)
class ViewName(object):
def __init__(self, name):
self.name = name
mapper(ViewName, v)
终于找到了。
我们可以为 sql 视图创建类。这是一个简单的例子。
class ViewName(Base):
__table__ = Table(
'viewname',
Base.metadata,
Column('id', Integer, primary_key=True),
Column('foreign_key', Integer, ForeignKey('sometablename.id'),
autoload=True, autoload_with=engine
)
就是这样。我们可以使用 ViewName 类访问“viewname”表。
谢谢所有回复我的人。
您可以这样做,但您必须手动定义主键。假设
id
是 v
的一列,您想将其用作主键(如我的 原始示例代码 中的情况),这是有效的:
from sqlalchemy import orm
class ViewName(object):
def __init__(self, name):
self.name = name
orm.mapper(ViewName, v, primary_key=[v.c.id])
Session = orm.sessionmaker(bind=engine)
for r in Session().query(ViewName):
print r.id, r.number
要测试这一点,只需将此片段粘贴到上面链接的答案中我的工作示例的末尾即可。请参阅文档了解更多详细信息(例如,您可以使用属性来定义外键)。
编辑(在上面链接的我的答案的评论中): 或者,您可以稍微更改我的原始代码(和您的问题)中的视图定义并写入:
v = Table('viewname', metadata, Column('id', Integer, primary_key=True), autoload=True)
即,已经在表定义中添加主键。那么您不需要
primary_key
中的 orm.mapper
参数,并且问题中的其余代码可以开箱即用。