我正在尝试使用SQLAlchemy automap来映射现有的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
答案 0 :(得分:2)
这对我有用。
from sqlalchemy.ext.automap import automap_base
from sqlalchemy import create_engine, MetaData, Column, Integer, Table
from sqlalchemy.orm import Session
Base = automap_base()
conn_str = '...'
engine = create_engine(conn_str)
metadata = MetaData()
# you only need to define which column is the primary key. It can automap the rest of
the columns.
viewname = Table('view_name',metadata, Column('some_id', Integer,
primary_key=true), autoload=True, autoload_with=engine)
Base.prepare()
view_name = Base.classes.view_name
session = Session(engine)
v1 = session.query(view_name).first()
答案 1 :(得分:1)
对于仍然可以使用它的任何人,请尝试以下操作:
Table('view_name',Base.metadata, Column('some_id', Integer,
primary_key=True), autoload=True, autoload_with=engine)
Base.prepare(engine, reflect=True)