【发布时间】:2018-07-11 19:33:00
【问题描述】:
我正在尝试使用 SQLAlchemy 自动映射来映射现有的 MSSQL 视图。我可以成功地自动映射一个表并对其执行查询,但是一旦我定位一个视图,它就会失败。这是我尝试过的几种不同尝试的一些代码。
-
映射标准表适用于以下内容:
engine = create_engine("mssql+pyodbc://username:password@serv.example.com/db?driver=ODBC+Driver+13+for+SQL+Server") metadata = MetaData() metadata.reflect(engine, only=['table_name']) Base = automap_base(metadata=metadata) Base.prepare() table = Base.classes.table_name -
使用以下内容映射视图失败
engine = create_engine("mssql+pyodbc://username:password@serv.example.com/db?driver=ODBC+Driver+13+for+SQL+Server") metadata = MetaData() metadata.reflect(engine, only=['view_name'], views=True) Base = automap_base(metadata=metadata) Base.prepare() view = Base.classes.view_name
编辑:我现在尝试创建一个将唯一列映射为主键的类,但我仍然遇到错误。这是我正在尝试的。
Base.automap()
class view_name(Base):
__tablename__ = 'view_name'
some_id = Column('some_id', Integer, primary_key=True)
engine = create_engine("mssql+pyodbc://username:password@serv.example.com/db?driver=ODBC+Driver+13+for+SQL+Server")
metadata = MetaData()
metadata.reflect(engine, only=['view_name'], views=True)
Base.prepare()
view = Base.classes.view_name
我现在收到以下错误。
AttributeError: view_name
【问题讨论】:
-
视图是否有一个可以标记为“主键”的唯一列?
-
是的,该视图确实有几个独特的列。
-
你必须define a class explicitly(只是“pk”列)并指示SQLA到use suitable candidate columns as key。
-
我用我最近的尝试修改了我的问题。你还有其他指点吗?
-
你可以使用
view_name这个类。自动映射会填补其余部分,或者至少应该这样做。
标签: python sql-server sqlalchemy