rjk*_*ski 5 python sql-server sqlalchemy
我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)映射具有以下内容的视图失败
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
Run Code Online (Sandbox Code Playgroud)编辑:我现在尝试创建一个将唯一列映射为主键的类,但我仍然收到错误。这就是我正在尝试的。
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
Run Code Online (Sandbox Code Playgroud)
我现在收到以下错误。
AttributeError: view_name
Run Code Online (Sandbox Code Playgroud)
这对我有用。
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()
Run Code Online (Sandbox Code Playgroud)