【发布时间】:2015-05-12 22:27:04
【问题描述】:
我使用 SQlAlchemy 自动映射扩展来避免手动编写声明性基类。主要是因为我对 db 架构不是很熟悉,只需要与一小部分表和列进行交互
我正在使用以下代码设置 SQlAlchemy 会话,然后与我的数据库进行交互。使用它似乎效果很好。
engine = create_engine('mssql+pymssql://xx:xxx@xxx/xxx', implicit_returning=False)
metadata = MetaData()
tables = ['xxx', 'xxx', 'xxx']
metadata.reflect(engine, only=tables)
base = automap_base(metadata=metadata)
base.prepare()
session_maker = sessionmaker(bind=engine)
session = session_maker()
由于数据库有大量的表和列,加载会话需要相当长的时间,因为每次都必须进行反射。
此外,当我使用的 IDE (PyCharm) 可以正确推断对象类型时,它为我提供了非常有用的自动完成功能。由于显而易见的原因,当我使用自动映射时它不起作用。获得正确的列名字符串通常是一个挑战,并且需要我从 db management studio 反复验证它们。
有没有办法使用反射生成声明性基类?我至少可以以其他方式保留反映的元数据吗?可以安全地假设 db 架构不会改变。
【问题讨论】:
标签: sqlalchemy