Как ускорить работу с sqlalchemy?
Имеется большая база данных и, видимо, много времени тратиться на её reflect. Вот мой код:
class DataBase:
def __init__(self, config_bd: Any):
""" Подключение к БД """
self.config_bd = config_bd
host = self.config_bd["host"]
port = self.config_bd["port"]
sid = self.config_bd["sid"]
user = self.config_bd["user"]
password = self.config_bd["password"]
sid = orcbd.makedsn(host, port, sid=sid)
try:
self.time_start = time.time()
self.engine = db.create_engine(f"oracle+cx_oracle://{user}:{password}@{sid}", echo=True)
self.metadata_obj = MetaData()
# self.metadata_obj.reflect(bind=self.engine, only=[f'{table_name}'])
self.Session = sessionmaker(self.engine)
self.session = self.Session()
except Exception as _ex:
print("Ошибка при подключении к БД", _ex)
else:
print("Соединение с БД установлено")
def get_table(self, table_name: str):
"""
Получение таблицы
@param table_name:
Название таблицы
"""
table = Table(table_name, self.metadata_obj, autoload_with=self.engine)
return table
def get_column(self, table_name: str):
"""
Получение столбцов из таблицы
@param table_name:
Название таблицы
"""
table = self.get_table(table_name)
columns = [c.name for c in table.columns]
print("Столбцы из таблицы:", columns)
return columns
def select_from_table(self, table_name: str, where=None):
"""
Выборка из таблицы
@param table_name:
Название таблицы
@param where:
Запрос для выборки
"""
table = self.get_table(table_name)
match where:
case None:
task = self.session.query(table)
case _:
task = self.session.query(table).filter_by(**where)
result = [c for c in task]
return result
На запрос обычного select'а тратиться 8 секунд. Хотя если не использовать sqlalche,y, то на этот же запрос тратиться меньше секунды. Я только начинаю работать с алхимией, может я что-то не так делаю?
Источник: Stack Overflow на русском