【发布时间】:2014-02-14 04:23:41
【问题描述】:
我正在尝试将来自 postgres (from_engine) 的子查询中的数据复制到 sqlite 数据库。我可以使用以下命令来复制表:
smeta = MetaData(bind=from_engine)
table = Table(table_name, smeta, autoload=True)
table.metadata.create_all(to_engine)
但是,我不确定如何为子查询语句实现相同的效果。
-桑迪普
编辑: 跟进答案。创建表后,我想创建一个子查询 stmt,如下所示:
table = Table("newtable", dest_metadata, *columns)
stmt = dest_session.query(table).subquery();
但是,最后一个 stmt 以错误结束 cursor.execute(语句,参数) sqlalchemy.exc.ProgrammingError:(ProgrammingError)关系“newtable”不存在 第 3 行:来自新表)AS anon_1
【问题讨论】:
-
您能多解释一下您想要达到的目标吗?您想使用查询结果的方案和数据创建一个表吗?我不明白子查询是如何发挥作用的。
-
Stefan,是的,我想创建一个表并用查询结果填充它。考虑一个过滤单个属性(即投影和选择)的查询。我想创建一个只有一个属性和选择结果的表,即子查询结果的架构,与执行该查询的原始表相反。希望这会有所帮助。
-
@Sandeep 这听起来像是拥有视图的确切情况,就像简单地基于查询结果和模式创建一个视图,然后将该视图视为表本身。 SQLAlchemy 不支持创建开箱即用的视图,但添加您自己的支持相对容易,查看gist.github.com/techniq/5174412 以获取视图实现,docs.sqlalchemy.org/en/rel_0_8/core/ddl.html 了解如何将其集成到 SQLAlchemy。如果这是有道理的,我可以将其扩展为一个完整的正确答案
-
@gts 能够创建视图很好。我想要的不仅仅是创建一个视图。本质上是将架构和结果复制到数据库的另一个实例。
标签: python sql sqlalchemy