Ошибка 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:

    """Создает новый сеанс db2"""

    engine = create_engine(DB_URL)

    session = Session(engine)

    возврат сеанса


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

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

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

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

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

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