As Mentioned here I created View.是否有可能在SqlAlchemy中使用映射器將類與視圖映射?
是否有可能創建視圖類與會話一起使用?
v = Table('viewname', metadata, autoload=True)
class ViewName(object):
def __init__(self, name):
self.name = name
mapper(ViewName, v)
As Mentioned here I created View.是否有可能在SqlAlchemy中使用映射器將類與視圖映射?
是否有可能創建視圖類與會話一起使用?
v = Table('viewname', metadata, autoload=True)
class ViewName(object):
def __init__(self, name):
self.name = name
mapper(ViewName, v)
您可以這樣做,但您必須手動定義主鍵。假設id
是v
要作爲主鍵使用(這是在我的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
參數,並且你的問題中的其他代碼可以直接使用。
最後我找到了。
我們可以爲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」表。
謝謝所有回覆我的人。
道歉。糾正我,如果我錯了。我混合你的代碼和@van代碼。以下是對我來說完美的作品。 'class ViewName(Base): __table__ = Table('viewname',Base.metadata,Column('id',Integer,primary_key = True),autoload = True,autoload_with = engine)' –
@SyedHabibM:是的,那也起作用。你只需要在某個地方定義主鍵。 – stephan