如何在SQLAlchemy中访问SQLite数据库的视图'view_xxx'?
如何在SQLAlchemy中访问SQLite视图(基于automap)
你当前使用automap_base反射数据库结构的方式,默认只会识别表,要访问已创建的view_xxx视图,只需调整反射逻辑即可,具体步骤如下:
1. 反射时包含视图
修改metadata.reflect()方法,添加views=True参数,让SQLAlchemy在反射时包含数据库中的视图对象:
metadata.reflect(engine, views=True)
2. 像访问表一样访问视图
调整后的完整代码示例:
engine = create_engine('sqlite:///' + os.path.join(APP_ROOT, 'db.sqlite')) session = scoped_session(sessionmaker(bind=engine)) metadata = MetaData() # 关键:反射时包含视图 metadata.reflect(engine, views=True) Base = automap_base(metadata=metadata) Base.prepare() # 直接通过视图名访问,用法和表完全一致 view_data = session.query(Base.classes.view_xxx).all()
额外说明
- 如果视图名称包含特殊字符或与Python关键字冲突,改用字符串索引访问:
Base.classes['view_xxx'] - 视图的查询操作和普通表完全相同,支持过滤、排序、分页等SQLAlchemy查询语法
内容的提问来源于stack exchange,提问作者irina_ikonn
相关产品推荐
相关产品推荐

