Таблица PostgreSQL существует, но python говорит, что это не так

#python #sql #postgresql #conditional-statements #exists

#питон #sql #postgresql #условные утверждения #существует

Вопрос:

Я новичок в Python, и хотя это кажется какой-то глупой ошибкой, но я не могу понять, что я делаю не так. Любые предложения или подсказки будут очень полезны. А также, если на этот вопрос уже был дан ответ раньше, пожалуйста, свяжите меня с этим.

Я пишу простой скрипт на python, который будет подключаться к базе данных. Теперь в этой базе данных я проверяю test_run , существует ли эта таблица. Если он существует, просто выведите, что он существует, если нет, создайте таблицу.

 # Connect to the Database Server, now with the created DB try:  connection = psycopg2.connect(user="postgres", password="postgres", host="127.0.0.1", port="5432",  database="dashboard") except (Exception, psycopg2.Error) as error:  print("Connection not established", error)   # Check if test_run Table Exists cursor = connection.cursor() if bool(cursor.execute("SELECT EXISTS(SELECT * FROM information_schema.tables WHERE table_name='test_run')")):  print('test_run table exists. Moving On.') else:  print('test_run does not exist. Creating the Table now.')  cursor.execute("CREATE TABLE test_run (run_id serial PRIMARY KEY, date date, status varchar(255), "  "total_time integer, project_name varchar(255));")  

Теперь в БД test_run присутствует таблица, и когда я запускаю SELECT EXISTS команду, я получаю true .

скриншот pgadmin

Теперь, когда я запускаю приведенный выше сценарий else , выполняется условие, указывающее, что test_run таблица не существует. Но в идеале if условие должно выполняться, поскольку таблица действительно существует.

Ответ №1:

Тебе стоит попробовать это.

 import psycopg2 # Connect to the Database Server, now with the created DB try:  connection = psycopg2.connect(user="postgres", password="postgres", host="127.0.0.1", port="5432", database="dashboard") except (Exception, psycopg2.Error) as error:  print("Connection not established", error)   # Check if test_run Table Exists cursor = connection.cursor() cursor.execute("SELECT EXISTS(SELECT * FROM information_schema.tables WHERE table_name='test_run')") if bool(cursor.fetchone()[0]):  print('test_run table exists. Moving On.') else:  print('test_run does not exist. Creating the Table now.')  cursor.execute("CREATE TABLE test_run (run_id serial PRIMARY KEY, date date, status varchar(255), "  "total_time integer, project_name varchar(255));")  connection.commit()  

Комментарии:

1. cursor.fetchone()[0] сделал свое дело. Большое спасибо за вашу быструю помощь.