Я создаю простое приложение для подключения к базе данных 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