首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python表反射*没有*约束和索引反射

问Python表反射*没有*约束和索引反射
EN

Stack Overflow用户
提问于 2018-10-01 02:18:09
回答 1查看 821关注 0票数 3

我想使用SQLAlchemy ORM来反映几个表(在文档中称为“反射数据库对象”)。我感兴趣的是反映表DDL,而不是索引或约束-但这似乎是默认行为。

是否有方法禁用明显默认的索引和约束反射?

这就是我要做的:

代码语言:javascript
复制
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后,我可以清楚地看到相关的索引&约束正在幕后反映。我不想这样做,因为它给我的应用程序增加了不必要的数据库调用和开销。如何禁用索引和约束反射?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-10 02:40:09

在反射数据库对象时,似乎没有一种明显的方法来限制隐藏下发生的事情,所以我发现最好和最有效的方法就是按照文档中描述的那样显式地定义映射的类,只包括您需要的列,而不是所有的列。

代码语言:javascript
复制
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()语法来执行查询,但可以为您节省使用数据库字典表的大量开销。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52583845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档