2013-12-11 87 views

回答

8

您可以這樣做,但您必須手動定義主鍵。假設idv要作爲主鍵使用(這是在我的original example code的情況下)的列,這個工程:

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 

要進行測試,只是複製粘貼此片段在結束我的在上面鏈接的答案中的工作示例。有關更多詳細信息,請參閱the documentation(例如,您可以使用屬性來定義外鍵)。

EDIT(在comment到我的回答上面鏈接麪包車): 或者,可以稍微改變視圖definiton在我的原代碼(你的問題),並寫:

v = Table('viewname', metadata, Column('id', Integer, primary_key=True), autoload=True) 

即已經在表格定義中添加主鍵。那麼你不需要orm.mapper中的primary_key參數,並且你的問題中的其他代碼可以直接使用。

+2

道歉。糾正我,如果我錯了。我混合你的代碼和@van代碼。以下是對我來說完美的作品。 'class ViewName(Base): __table__ = Table('viewname',Base.metadata,Column('id',Integer,primary_key = True),autoload = True,autoload_with = engine)' –

+0

@SyedHabibM:是的,那也起作用。你只需要在某個地方定義主鍵。 – stephan

13

最後我找到了。

我們可以爲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」表。

謝謝所有回覆我的人。

相關問題