mr_qpdb
@mr_qpdb
⏱ - is not eternal

Как уменьшить вложенность, или делаю ли я что-то не так?

Всем привет!
У меня есть говнокод, где я взаимодействую с БД, а именно PostgreSQL. Библиотека: Psycopg2.
Дело в том, что вложенность говнокода получается достаточно большим, и мне кажется, что я делаю что-то не так.
Вот код:
with psycopg2.connect('данные бд') as conn:
    with conn.cursor() as cursor:
        # для примера:
        cursor.execute('SELECT name FROM users WHERE id = %s', [id])
        result_name = [x[0] for x in cursor.fetchall()]
        with psycopg2.connect('данные бд') as conn: # получается вложенность
            with conn.cursor() as cursor: # без этой вложенности - получается ошибка
                cursor.execute('SELECT name FROM confirm WHERE name = %s', [result_name[0]])
                result_confirm = [x[0] for x in cursor.fetchall()]
                if result_confirm.__len__() == 0:
                    ...

Если вот эти вложенности не прописывать, то выходит ошибка: connection already is closed, поэтому приходится так засорять и так уже дерьмовый код.
Как это исправить? Или все так и должно быть?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Не совсем понятно на примере что именно не так, но такой вариант должен работать:
with psycopg2.connect('данные бд') as conn:
    with conn.cursor() as cursor:
        cursor.execute('SELECT name FROM users WHERE id = %s', [id])
        result_name = [x[0] for x in cursor.fetchall()]
    with conn.cursor() as cursor:
        cursor.execute('SELECT name FROM confirm WHERE name = %s', [result_name[0]])
        result_confirm = [x[0] for x in cursor.fetchall()]

Возможно вы где то выходите из блока, или закрываете соединение самостоятельно?
А вообще, я бы порекомендовал использовать SQLAlchemy, он простой как палка, но работать с БД намного проще.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект