我想使用SQLAlchemy ORM来反映几个表(在文档中称为“反射数据库对象”)。我感兴趣的是反映表DDL,而不是索引或约束-但这似乎是默认行为。
是否有方法禁用明显默认的索引和约束反射?
这就是我要做的:
from sqlalchemy import and_, create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker
conn_str = f'oracle://{user}:{pswd}@{srvc}'
engine = create_engine(conn_str, echo=True)
Session = sessionmaker(bind=engine)
meta = MetaData()
my_table = Table('my_table', meta, autoload=True, autoload_with=engine,
schema='my_schema')启用echo=True后,我可以清楚地看到相关的索引&约束正在幕后反映。我不想这样做,因为它给我的应用程序增加了不必要的数据库调用和开销。如何禁用索引和约束反射?
谢谢。
发布于 2018-10-10 02:40:09
在反射数据库对象时,似乎没有一种明显的方法来限制隐藏下发生的事情,所以我发现最好和最有效的方法就是按照文档中描述的那样显式地定义映射的类,只包括您需要的列,而不是所有的列。
Base = declarative_base()
class Person(Base):
__tablename__ = 'person'
__table_args__ = {'schema': 'schema_name'}
person_id = Column(Integer, primary_key=True)
first_name = Column(String)
last_name = Column(String)然后,可以使用与数据库反射相同的session.query()语法来执行查询,但可以为您节省使用数据库字典表的大量开销。
https://stackoverflow.com/questions/52583845
复制相似问题