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

Ссылка скопирована
1 ответ

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

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 закрыто")

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 закрыто")

Дополнительно:

Так таблица или запись?
Это как бы немножечко разные вещи

  • FanatPHP, опечатка .. столбец - а не "запись" .Код должен проверять таблицу на дубль и создаваемый стоблец , типо не должно быть например два столбца c названием "id"
  • что за ерунда? зачем проверять столбец? какой в этом смысл? ЗАчем вообще создавать таблицу скриптом?
  • Если просто проверить наличие таблицы, то можно запросом

    select * from pg_tables where tablename = 'value_result'

    select * from pg_tables where tablename = 'value_result'

    Если же нужно именно ругаться, когда таблица не создалась или когда запись не получилась, то можно использовать try .. except с отловом конкретного кода ошибки

    try:     cursor.execute(create_table_query) except НужноеИсключение:     print("таблица уже существует")

    try: cursor.execute(create_table_query) except НужноеИсключение: print("таблица уже существует")

    Какие конкретно исключения используется я навскидку не знаю, можно посмотреть в документации:
    https://www.psycopg.org/docs/errors.html
    или вывести опытным путем

    except Exception as e:     print(e)

    except Exception as e: print(e)

    Ответы:

    CREATE TABLE IF NOT EXISTS value_result(   //add for PostgreSQL 9.1+

    CREATE TABLE IF NOT EXISTS value_result( //add for PostgreSQL 9.1+

    • Лариса .•º я думаю это условием прописать , типа такого , но что то у меня пока не выходит
      if exists (select * from result_test_parsing.sys.tables where name = 'value_result'):         print('Exists')     else:         create_table_query = '''CREATE TABLE value_result                           (TESTID TEXT PRIMARY KEY     NOT NULL); '''                 # Выполнение команды: это создает новую таблицу         cursor.execute(create_table_query)         connection.commit()         print("Таблица успешно создана в PostgreSQL")

      if exists (select * from result_test_parsing.sys.tables where name = 'value_result'): print('Exists') else: create_table_query = '''CREATE TABLE value_result (TESTID TEXT PRIMARY KEY NOT NULL); ''' # Выполнение команды: это создает новую таблицу cursor.execute(create_table_query) connection.commit() print("Таблица успешно создана в PostgreSQL")

    • EvaSpence,
      create_table_query = '''CREATE TABLE IF NOT EXISTS  value_result                           (TESTID TEXT PRIMARY KEY     NOT NULL); ''' cursor.execute(create_table_query)

      create_table_query = '''CREATE TABLE IF NOT EXISTS value_result (TESTID TEXT PRIMARY KEY NOT NULL); ''' cursor.execute(create_table_query)

    • Следует учитывать, что этот запрос неудачно работает в ситуации, когда таблица есть, но её структура отличается от заданной. Запрос молча не сработает, не сообщив о расхождении - и ошибка проявится только при обращении к таблице.
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Анна SEO Ответ

    Для проверки существования таблицы в базе данных в Python, вы можете использовать библиотеку SQLAlchemy. Вот пример кода, который позволит вам проверить, существует ли таблица в БД:

    from sqlalchemy import create_engine, MetaData
     
    # Создаем соединение с базой данных
    engine = create_engine('sqlite:///mydatabase.db')
     
    # Создаем объект MetaData
    metadata = MetaData()
     
    # Получаем все таблицы из базы данных
    existing_tables = engine.table_names()
     
    # Проверяем, существует ли таблица с заданным именем
    if 'my_table' in existing_tables:
        print('Таблица существует в базе данных')
    else:
        print('Таблица не существует в базе данных')

    from sqlalchemy import create_engine, MetaData # Создаем соединение с базой данных engine = create_engine('sqlite:///mydatabase.db') # Создаем объект MetaData metadata = MetaData() # Получаем все таблицы из базы данных existing_tables = engine.table_names() # Проверяем, существует ли таблица с заданным именем if 'my_table' in existing_tables: print('Таблица существует в базе данных') else: print('Таблица не существует в базе данных')

    В этом примере мы создаем соединение с базой данных, получаем список всех существующих таблиц и проверяем, существует ли таблица с заданным именем. Если таблица существует, то выводится сообщение "Таблица существует в базе данных", в противном случае выводится сообщение "Таблица не существует в базе данных".

    Вы также можете модифицировать этот код для работы с другими типами баз данных, просто измените строку подключения к базе данных в функции create_engine().

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно