sqlalchemy, postgres, докер

#python #postgresql #sqlalchemy

Вопрос:

Я изо всех сил пытаюсь понять, почему мой запрос ниже возвращает следующую ошибку, когда я передаю его непосредственно из postgres, где он работает нормально. Я читал, как помещать имя таблицы в кавычки, но это не работает :/.

 from sqlalchemy import create_engine

db_name = 'blahh'
db_user = 'blahhd'
db_pass = 'blhd'
db_host = 'localhost'
db_port = 5432

## Connect to to the database
db_string = 'postgres://{}:{}@{}:{}/{}'.format(db_user, db_pass, db_host, db_port, db_name)
db = create_engine(db_string)
connection = db.connect()

connection.execute('select cake.name, cake.industry, cake.created_at from cake limit 10;')

connection.close()
 

ошибка:

  sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) relation "cake" does not exist
LINE 1: ...                                                cake limi...
                                                             ^
 

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

1. Либо таблица не была создана, либо вы подключаетесь не к той базе данных, либо вы подключаетесь к пользователю, которому не разрешен доступ к таблице. Если вы запускаете новые экземпляры docker, вы уверены, что таблица будет создана и заполнена? Регистрируется ли процесс?

Ответ №1:

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

Если вы попробуете что-то подобное:

 from sqlalchemy import create_engine

db_name = 'blahh'
db_user = 'blahhd'
db_pass = 'blhd'
db_host = 'localhost'
db_port = 5432

## Connect to to the database
db_string = 'postgres://{}:{}@{}:{}/{}'.format(db_user, db_pass, db_host, db_port, db_name)
db = create_engine(db_string)
connection = db.connect()

connection.execute('select cake.name, cake.industry, cake.created_at from cake limit 10;').fetchall()

connection.close()
 

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

1. Я добавил то, что вы посоветовали, но все та же ошибка @Dharman