SQLAlchemy反射含联合主键的关联表时未生成Base类问题
解决SQLAlchemy Automap反射双主键关联表不生成映射类的问题
问题原因
SQLAlchemy的automap机制默认会将仅包含两个外键且均为主键的关联表判定为多对多关系的中间表,不会为其生成独立的映射类,而是自动在关联的两张主表(exampleThing和exampleThingGroup)之间建立多对多的relationship。
解决方案
方案1:直接使用metadata中的Table对象
既然metadata已经成功反射了该表,可直接从metadata.tables中获取对应的Table实例进行操作:
# 反射后直接获取表对象 example_thing_mapping = metadata.tables['exampleThingMapping'] # 示例:查询该表数据 with engine.connect() as conn: result = conn.execute(example_thing_mapping.select()) for row in result: print(row)
方案2:强制automap生成所有表的映射类
调用Base.prepare()时传入reflect=True参数,强制让automap为所有反射到的表生成映射类,包括中间关联表:
# 修改prepare调用,添加reflect=True Base.prepare(reflect=True) # 现在可以正常访问映射类 ExampleThingMapping = Base.classes.exampleThingMapping print(ExampleThingMapping)
内容的提问来源于stack exchange,提问作者Peter Maggio
相关产品推荐
相关产品推荐

