Задать вопрос
EvaSpence
@EvaSpence

Python. Как проверить, существует ли таблица в БД?

Подскажите пожалуйста как подправить скрипт?
Он должен проверить, существует ли такая таблица или столбец в таблице в БД, и если нет, тогда запишет данные, а если есть то скажет "Дубль", но при этом не вылетит из бд

import psycopg2
    from psycopg2 import Error

    try:
        # Подключиться к существующей базе данных
        connection = psycopg2.connect(user="postgres",
                                    # пароль, который указали при установке PostgreSQL
                                    password="*****",
                                    host="127.0.0.1",
                                    port="5432",
                                    database="result_test_parsing")
            
        # Создайте курсор для выполнения операций с базой данных

        #  для проверки на дубль новой таблицы
        cursor = connection.cursor()
        checkTableExists = """SELECT table_name
                            FROM information_schema.tables
                            WHERE table_schema = 'databasename'
                            AND table_name = 'tablename';"""
        cursor.execute(checkTableExists)
        connection.commit()
        #  для создания новой таблицы
        create_table_query = '''CREATE TABLE value_result
                            (TESTID TEXT PRIMARY KEY     NOT NULL); '''

        # Выполнение команды: это создает новую таблицу
        cursor.execute(create_table_query)
        connection.commit()
        print("Таблица успешно создана в PostgreSQL")

        #SQL-запрос для вставки записей в таблицу базы данных
        cursor.execute(
    "INSERT INTO VALUE_RESULT (TESTID) VALUES ('fio-example')"
    )
        connection.commit()
        print('Запись успешно вставлена')
    except (Exception, Error) as error:
        print("Ошибка при работе с PostgreSQL", error)
    finally:
        if connection:
            cursor.close()
            connection.close()
            print("Соединение с PostgreSQL закрыто")
  • Вопрос задан
  • 2832 просмотра
Подписаться 1 Простой 3 комментария
Решения вопроса 1
@o5a
Если просто проверить наличие таблицы, то можно запросом
select * from pg_tables where tablename = 'value_result'

Если же нужно именно ругаться, когда таблица не создалась или когда запись не получилась, то можно использовать try .. except с отловом конкретного кода ошибки
try:
    cursor.execute(create_table_query)
except НужноеИсключение:
    print("таблица уже существует")

Какие конкретно исключения используется я навскидку не знаю, можно посмотреть в документации:
https://www.psycopg.org/docs/errors.html
или вывести опытным путем
except Exception as e:
    print(e)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@barolina
turn coffee into code
CREATE TABLE IF NOT EXISTS value_result(   //add for PostgreSQL 9.1+
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы