Ошибка SQLAlchemy при запросе пустой таблицы в DB2Python

Программы на Python
Ответить
Anonymous
 Ошибка SQLAlchemy при запросе пустой таблицы в DB2

Сообщение Anonymous »

В моей базе данных DB2 есть таблица с информацией о местонахождении клиентов. Каждое местоположение имеет уникальный идентификатор (WLC = код рабочего места).
Я пытаюсь выполнить запрос на Python с помощью SQLAlchemy, чтобы получить все WLC в таблице, используя этот код:
with create_new_session() as session:
statement = select(Location.wlc)
rows = session.exec(statement).all()

Когда в таблице есть хотя бы одна запись, все работает нормально. Я могу подключиться к базе данных, запросить таблицу и получить записи.
Когда в таблице нет записей, код завершается сбоем.
Под прикрытием SQLAlchemy строит для меня этот запрос:
SELECT "LOCATIONS"."LOCS"."WLC" FROM "LOCATIONS"."LOCS"

Если я использую этот запрос напрямую с текстом
statement = text('SELECT "LOCATIONS"."LOCS"."WLC" FROM "LOCATIONS"."LOCS"')

Или, если я напишу запрос вручную, он тоже будет работать нормально.
statement = text('SELECT LOCS.WLC FROM LOCS')

Но если мне придется писать запросы самому, то мне не нужны ORM и SQLAlchemy.
Исключение, которое возникает:
File "/home/genaro/Documents/worklocations/src/work_locations/jobs/handlers/extract.py", line 240, in _get_db2_wlcs
rows = session.exec(statement).all()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/genaro/Documents/worklocations/venv/lib/python3.12/site-packages/sqlalchemy/engine/result.py", line 1476, in all
return self._allrows()
^^^^^^^^^^^^^^^
File "/home/genaro/Documents/worklocations/venv/lib/python3.12/site-packages/sqlalchemy/engine/result.py", line 401, in _allrows
rows = self._fetchall_impl()
^^^^^^^^^^^^^^^^^^^^^
File "/home/genaro/Documents/worklocations/venv/lib/python3.12/site-packages/sqlalchemy/engine/result.py", line 1389, in _fetchall_impl
return self._real_result._fetchall_impl()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/genaro/Documents/worklocations/venv/lib/python3.12/site-packages/sqlalchemy/engine/result.py", line 1813, in _fetchall_impl
return list(self.iterator)
^^^^^^^^^^^^^^^^^^^
File "/home/genaro/Documents/worklocations/venv/lib/python3.12/site-packages/sqlalchemy/orm/loading.py", line 147, in chunks
fetch = cursor._raw_all_rows()
^^^^^^^^^^^^^^^^^^^^^^
File "/home/genaro/Documents/worklocations/venv/lib/python3.12/site-packages/sqlalchemy/engine/result.py", line 393, in _raw_all_rows
return [make_row(row) for row in rows]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'NoneType' object is not iterable

Похоже, что руководитель возвращает None вместо пустого списка.
Есть идеи? Что-то я делаю неправильно? Заранее спасибо.
PS: Заполню свой вопрос, чтобы ответить на вопросы ниже:
  • Это версии:
    Имя: SQLAlchemy
    Версия: 1.4.52
    Имя: sqlmodel
    Версия: 0.0.11
    Имя: ibm_db
    Версия: 3.2.7
    Имя: ibm_db_sa
    Версия: 0.4.2
  • Это create_new_session(). Но, как я уже сказал, если в таблице есть записи, код работает нормально.
def create_new_session() -> Session:
"""Creates new db2 session"""
engine = create_engine(DB_URL)
session = Session(engine)
return session


Подробнее здесь: https://stackoverflow.com/questions/798 ... ble-in-db2
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»