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 закрыто") |
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 закрыто")
Дополнительно:
Так таблица или запись?
Это как бы немножечко разные вещи
Если просто проверить наличие таблицы, то можно запросом
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)
- Следует учитывать, что этот запрос неудачно работает в ситуации, когда таблица есть, но её структура отличается от заданной. Запрос молча не сработает, не сообщив о расхождении - и ошибка проявится только при обращении к таблице.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для проверки существования таблицы в базе данных в 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('Таблица не существует в базе данных')
В этом примере мы создаем соединение с базой данных, получаем список всех существующих таблиц и проверяем, существует ли таблица с заданным именем. Если таблица существует, то выводится сообщение "Таблица существует в базе данных", в противном случае выводится сообщение "Таблица не существует в базе данных".
Вы также можете модифицировать этот код для работы с другими типами баз данных, просто измените строку подключения к базе данных в функции create_engine().