gpt4 book ai didi

Python SQLAlchemy ORM - 表反射*无*约束和索引反射

转载 作者:行者123 更新时间:2023-12-04 17:44:51 24 4
gpt4 key购买 nike

我想使用 SQLAlchemy ORM 来反射(在文档中称为“反射数据库对象”)几个表。我感兴趣的只是反射(reflect)表 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 后,我可以清楚地看到相关的索引和约束正在幕后反射(reflect)出来。鉴于不必要的数据库调用和它强加给我的应用程序的开销,我希望完成此操作。如何禁用索引和约束反射?

谢谢。

最佳答案

似乎没有明显的方法来限制在反射(reflect)数据库对象时隐藏在幕后发生的事情,所以我发现解决这个问题的最佳和最有效的方法是简单地明确定义映射类,如文档中所述,只包括您需要的列,而不是所有内容。

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() 语法执行查询,该语法将数据库反射一起使用,但可以节省您去数据库字典表。

关于Python SQLAlchemy ORM - 表反射*无*约束和索引反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52583845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com