@No_name451

Почему cx_Oracle теряет часть данных при запросе к БД?

Использую cx_Oracle (8.2.0/8.0.1), произвожу запрос, но часть данных теряется.

Алгоритм:
1. Из сервиса на джанге произвожу коннект к БД Oracle через менедежра:
with cx_Oracle.connect(*connection_data(kod_mo)) as connection:
   cursor = connection.cursor()
   ...

2. Делаю запрос:
2.1 Через процедуру:
...
cursor.callproc(some_procedure, [some_args])
...

2.1 SQL самой процедуры:
...
cursor.execute(sql, {"some_args": some_args})
...

3. Извлекаю данные из запроса:
...
cursor.fetch(all/one/many)
...


Возвращает условных 250 строк (что процедура, что SQL запрос).
НО если делаю вызов из менеджера (pl/sql developer), то запрос возвращает условных 300 строк.
Получается, что где-то потерялось условных 50 строк.

Тестировал на разных БД:
I. 300 условных строк:
Ситуация как описал выше (теряется 50 условных строк). Причем, стабильно не приходят определенные строки, а не разные при каждом новом запросе.
II. Было 10 условных строк:
Что процедура, что сырой sql в cx_Oracle возвращал все строки, без потерь (10 условных строк из 10).

Коннект к базам проводился через одного и того же пользователя -> данные должны приходить одинаковые

Напрашивается вывод:
1. cx_Oracle не справляется с нагрузкой (что мне кажется маловероятным);
2. Что-то не так с БД I, где 300 условных строк.

Прошу подсказать, что я делаю не так.
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
@No_name451 Автор вопроса
Нашел ошибку. Она заключалась в большом колличетсве коннектов средствами джанги к разным БД в старте проекта, что-то вроде:
for key, value in dict_databases.items():
    DATABASES[key] = {
        "ENGINE": "django.db.backends.oracle",
        "NAME": key_key_key_...,
        ...

Удалив данные строки и делая коннект через пулл cx_Oracle все работает как надо.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы