За исключением того, что не работает должным образом и проблемы postgresql - PullRequest
0 голосов
/ 11 июля 2019

Я создаю простое приложение для подключения к базе данных postgresql, запрашиваю его, чтобы вывести список всех таблиц, и запрашиваю каждую таблицу для вывода некоторой информации. Мой код работает, но мне нужно исправить некоторые проблемы, приведенные ниже. df_dbtables - это мой pandas-массив данных схем и таблиц БД.

for index, row in df_dbtables.iterrows():
    try:
        schema_table = row['schema'] + "." + row['table']
        cur.execute("SELECT type,stylename FROM %s" % schema_table)
        rows = cur.fetchall()
        for row in rows:
            data.append({"Type" : row[0], "Stylename" : row[1]})
    except:
        continue

Выпуск № 1: Мой первый стол работает отлично. Но вторая таблица не имеет поля типа, поэтому она сталкивается с этой ошибкой postgresql: psycopg2.errors.UndefinedColumn: column "type" does not exist Затем код переходит в , за исключением , который сообщает коду продолжить. Проблема заключается в том, что после первого запуска исключения все другие запросы к таблицам других приложений также запускаются в исключении, игнорируя наличие полей типа и стиля. Как я могу правильно проигнорировать это сообщение об ошибке и перейти к следующей итерации? Кроме того, каков наилучший способ вывода ошибок SQL с использованием try / кроме?

Выпуск № 2: После исправления вышеуказанной проблемы я хотел бы знать, как я могу предотвратить это: если поле не существует и возникает ошибка SQL, оно будет игнорировать другое поле (если оно существует), поскольку оно попадет в исключение. Например: сценарий запрашивает таблицу X, то есть таблицу без поля типа, когда он сталкивается с исключением, он будет игнорировать данные стилевых имен.

Улучшение: Я пробовал много способов параметризации SQL-запроса. Я знаю, что этот способ очень удобен для SQL-инъекций, но правильные способы просто не работают.

Пробовал эти методы и другие , но не смог их успешно запустить.

APP Мой следующий шаг - создание приложения Flask для этого кода. Итак, если у вас есть решение, использующее Flask, оно будет приветствоваться.

Код обновлен 12 июля. Но все еще с теми же проблемами:

for index, row in df_dbtables.iterrows():
    try:
        schema_table = row['schema'] + "." + row['table']
        cur = con.cursor()
        cur.execute("SELECT type,stylename FROM %s" % schema_table)
        for r in rs:
            data.append({"Type" : r[0], "Stylename" : r[1]})
    #except psycopg2.OperationalError: traceback.print_exc()
    except: continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...